[Swift学习笔记]变量和常量


这里记录一些简单的(基本都是其他语言有过的,请自行查证):

    分号:Swift与JS一样可以忽略代码结尾的 ;(分号) 除非同一行中有多条独立语句,但是个人觉得还是不要忽略的好,额 纯属个人想法 出于和JS一样的原因.

    基本类型:数字类型有Int(常用),Int8,Int16,Int32,UInt等区分,一般使用Int会根据运行环境自行选择32or64,Double,Float

    进制表示形式:0b(零字母b)-二进制,0o(零字母o)-八进制,0x-十六进制;例:var 数字25十六进制 = 0x19


Swift 中,常量的定义使用let 变量的定义与 JS相似 使用var

let name = "Zero";
var age = 25;


在声明变量时 如果进行赋值,以及忽略对变量的类型标注,变量会自动推断分配类型,而如果没有进行初始化赋值,请对变量进行标注,否则XCode会给出错误信息

type annotation missing in pattern var XX

请使用 :(冒号) 进行类型标注,虽然初始化声明可以忽略类型标注,并不代表Swift是弱类型语言,同样无法更改一个已存在变量的类型.

let name:String = "Zero";
var age:Int;


常量与变量的命名可以使用 包括 Unicode 在内的字符,包括中文(保留关键字,数学符号,箭头,连线与制表符等除外)

let π = 3.1415926;
var 😄= "开心";
var `do` = 123; //print(`do`)如果一定要用保留关键字 可以使用反引号(`)将关键字包围的方式将其作为名字使用,但是尽量不要


输出变量的方式与其他语言大同小异,都是使用print

print(name); //Zero
debugPrint(name); // "Zero"
//需要注意的是 Swift有debugPrint 输出的内容与print是不同的,具体在之后详细解释.


变量在字符串中可以使用 \() 方式进行转义.

print("我的名字是 \(name)");  //我的名字是 Zero


数据类型赋值的转换直接使用 类型()进行转换 swift2之前好像有专门的方法 现在已经没了

var 整数 = Int("qwe135");
print(整数); // nil 需要注意这里得到的是一个nil 说明前面的整数 是一个[可选变量]

整数 = Int("3");
var 浮点数 = Float(0.12345);
浮点数 = Float(整数!) + 浮点数; //注意整数后面的 !
print(浮点数); // 3.12345

在上面的例子中看出当显示整数转换的字符串中含有非数字时,变量会得到一个 nil ,而一般变量是无法设置位nil的 只有可选变量能为nil  相当于 JS中的null

可选变量的声明方式为

var 变量名:类型?;

如果像上一个例子一样 变量初始化赋值的时候值有可能为空 那么 变量会被自动识别为可选变量.

Float(整数!)中 有个感叹号,因为 Float必须有参,而整数是可能为空的可选变量,所以要使用感叹号告诉计算机,你确定 "整数" 是一个有真实值的变量.

当你无法确认一个变量是否有真实值,而你又可以提供一个默认值的情况下 可以写成

Float(整数 ?? 0);

在if 等变量操作中 是无法像JS那样直接 if 布尔型意外的变量{} 的,除非变量是一个 布尔型变量

var 整数:Int? = 1;
var 浮点数:Float! = Float("0.12345");
var 布尔 = true;
if 整数{}  //会报错
if 布尔{} //正确

if 整数 != nil{} //这样可以 但是 整数必须是可选类型的 
if 浮点 != nil{} //会报错;因为浮点在声明的时候最后的(!)感叹号 表示它一定是一个有值的变量

还有一种判断可选变量是否有值的方式

if let 绑定 = 整数{
    print(绑定); //当整数有值就会赋值给 绑定,否则if为false.绑定只能在当前if中使用
}


最后是一个变量类型的特别记录   元组(tuple)  这个变量类型我只在 Python 中见到过.


元组的官方解释是把多个值组合成一个复合值,并且其中的每个值都可以有自己独特的类型,而不用和其他值相同(Tuples group multiple values into a single compound value. The values within a tuple can be of any type and do not have to be of the same type as each other.)


其实用过JS和PHP的话 很好理解 我们来看下例子

let result = (0,"error",[404,500,401],"错误信息");

用过PHP 或JS等 语言的看起来会不会有点眼熟??我们改变下

//php
var result = ["code" => 0,"status" => "error","list"=>[404,500,401],"msg"=>"错误信息"]

//js
var result = {code:0,status:"error",list:[404,500,401],msg:"错误信息"}

没错就是 PHP里的数组,而JS中集合/数组 也是类型的

并且 元组一样支持key=>value

let result = (code:0,status:"error",list:[404,500,401],msg:"错误信息");
print(result.list) // [404, 500, 401]

元组的取值方式有很多 ,在下面大概的列一下

let result = (0,"error");
let (code, status) = result
print("代码: \(code)") //代码: 0
print("结果: \(status)") //结果: error

print("代码: \(result.0)") //代码: 0
print("结果: \(result.1)") //结果: error

如果只需要一个返回值

let (_, status2) = result
print("结果: \(status2)") //结果: error


其他的类型都和其他语言差不多 就不说了.

最后需要注意一点 

无论是 String(字符串) 还是Character(字符) 赋值变量时都是使用 ""(双引号);单引号会报错 - -单引号有什么作用 我还没发现..如果谁知道请留言说下


特别说明下 千万不要因为Swift支持变量名能使用Unicode就滥用,比如用中文名(我上面的整型和浮点只是用来举例).用中文写代码 

第一 不标准

第二 容易出现不可预知的错误

第三 来回切换输入法会降低编码速度

第四 很Low 并不时髦

虽然我是英文渣  我也不推荐用中文写变量名


  Swift
  Swift

音乐的名字啊名字
  • 00:00