swift初见阅读笔记

326 阅读2分钟

swiftgg.gitbook.io/swift/huan-…

读后总结

基础使用不赘述,本文主要写和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导致的崩溃。