读后总结
基础使用不赘述,本文主要写和oc不同的地方
1、控制流
if 和 let 处理值缺失的情况
在 if 语句中,条件必须是一个布尔表达式——这意味着像 if score { ... } 这样的代码将报错,而不会隐形地与 0 做对比。
你可以一起使用 if 和 let 一起来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者是 nil 以表示值缺失。在类型后面加一个问号(?)来标记这个变量的值是可选的。
var optionalString: String? = "Hello"
print(optionalString == nil)
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
switch更强大,where子判断很好用(可用的地方很多,不单是switch)
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
2、函数
元组很好用,类似model
函数当参数用明白了,但是不知道干啥用;
函数当返回值不好用;
函数嵌套耦合太重,只适合少部分方法;
3、对象和类
创建实例的时候,每个属性都要有值;
析构函数 deinit 类似dealloc来主动释放一些对象;
4、枚举,结构体
枚举比OC的要复杂很多
enum Rank: Int {
case ace = 1
case two, three, four, five, six, seven, eight, nine, ten
case jack, queen, king
func simpleDescription() -> String {
switch self {
case .ace:
return "ace"
case .jack:
return "jack"
case .queen:
return "queen"
case .king:
return "king"
default:
return String(self.rawValue)
}
}
}
//枚举的值
let ace = Rank.ace
//位
let aceRawValue = ace.rawValue
//描述,可以配合使用
let aceDesc = ace.simpleDescription()
结构体在oc中用的少,swift中结构体和类很像。它们之间最大的一个区别就是结构体是传值,类是传引用。
5、协议和扩展
协议很重要,用的地方很多,也很强大,这里不赘述。 拓展没看懂文章想表达什么。
6、错误处理
这个东西在之前学习的Flutter中有很多,OC中也有,但是用的太少。 Error是一个协议,具体用的地方会去定义 NSError还是老样子。
7、泛型和可选值
这两个应该是最大的不同了。 泛型比OC的复杂的多,但是基础用法很类似。 可选值用的地方非常多,在我理解主要就是规避OC中nil导致的崩溃。