let 和 var
let 标识常量
var 表示变量
- swift :自动推导,var/let的类型是由“=” 右边的类型来隐式推导的,而不是由定义的类型还定义
let a = 10;
vat b = 10;
b = 11; //b可以做修改,而a不可以
- swift 有严格的类型控制,所有不同类型直接不可以直接计算,必须由程序员自己转换
let a = 20;
let b = 20.5;
//错误写法
print(a+b);
//正确写法
print(a+int(b)) ; //输出 40
或者 print(double(a)+b) //输出 40.5
//由此看出,不同类型之间无法直接做运算
可选值 Optional
可选值,顾名思义就是要么有值,要么为空(nil).可选值在参与计算时需要解包。
-
问号(?) 定义时使用,用来定义可选值
-
感叹号(!) 对可选值值解包,可选值不能为
nil
,该类型由程序员负责,解包时如果为nil,程序就会崩溃。 -
Optional是一个枚举值
- none 无值
- some 是某个值
-
定义方式
//1.原始定义方式 常量在定义时,必须有初始值
let x: Optional = 10
//2.简单定义 定义一个可选的 int类型
let y:int? = 20
- 可选值常见错误
解包:从可选值中获取非空值,如果可选值为nil ,程序会崩溃
let x: Optional = 10
let y:int? = 20
//错误写法
print(x+y)
//正确写法
print(x!+y!) //对于可选值计算,需要解包
注意:常量和变量的可选值不同,var 的可选值默认类型为nil,let默认没有可选值。
if 语法
- 条件判断不需要 ()
- 语句必须加 {}
let x = 10
if x>5 {
print(x)
}
//三目运算
x > 6 ? print("大于") : print("小了")
x > 6 ? print("大于") : () //“()”表示空执行
?? 问号操作符号
- 强行解包时存在风险,那么我们可以使用
??
规避风险 - 如果使用 if 判断可选值,将会是代码变得很丑陋
- ?? 实际上是一个简单的三目运算,当存在值就直接使用,如果为空,则使用
??
后面的值
//if 判空
let x:int? = nil
if x != nil {
print(x!) //此时需要解包
}
//?? 判空
let y:int? = nil
print(y ?? 0) //此时输出不会报错
if let /var 连用语法
-
if let
连用 判断对象的是否为nil
,{}
内一定有值,可以自己使用,无需解包。 -
if var
连用 判断对象的是否为nil
,{}
内一定有值,可以自己使用,无需解包; 可以修改值。
let myName:String? = "小陈"
let myAge:int? = 20
if var name = myName,
let age = myAge {
name = "小王" //var 可以修改值,let 不可以
print(name+String(age)) //输出结果是 “小王20”
}
guard let
-
guard
中文翻译,守卫、守护 -
guard let
守卫 一定有值,如果为空就直接返回,和if let
相反 - 规避解包,减少分支层次
let myName:String? = "小陈"
let myAge:int? = 20
guard let name = myName,
age = myAge else {
print("name or age is nil")
return
}
//此时使用不必担心为空
print(name+String(age)) //输出结果是 “小王20”
for 循环语句
在swift中,把之前OC里面的 for(int i=0;i<10;i++)
这种写法抛弃,i++/++i
也被取消,替代的写法是i += 1
,从语法来看,swift对语法要求异常严格,下面我们看看swift中的写法。
格式:for i in 0..<10{ }
或者for i in 0...10{ }
,其中0..<10
是一个整体,表示一个半闭半开区间[0,10),0...10
表示闭区间[0,10]
//循环打印 10--0,反序遍历 reversed:颠倒、逆转的意思
for i in (0...10).reversed(){
print(i)
}
//打印的结果就是 10,9,...2,1,0
字符串 Sting 在swift中是一个结构体,可以遍历
let str = "hello world"
//str.characters 字符串的字符数
for c in str.characters{
print(i)
}
let a = str.lengthOfBytes(using: .utf8) //a = 11 ,求字符串的字节数
let b = str.characters.count //b = 11 ,求字符个数,即字符串长度
String
swift中 使用as
做类型转换
let str = '我是中国人'
let ocStr = str as NSSting
//此时我们将swift类型的字符串转化成了OC的,然后可以使用OC的方法
字符串拼接 \(变量或者常量)
let a = 10
let b = "song"
let c:int? = 11
let d = "\(a)\(b)\(c ?? : 0)" //拼接a、b、c ,可选值要做处理
网友评论