2017年5月21。所谓的情人节,单身狗开始学习swift的第一天。
点1
if let name = optionalName {
greeting = "Hello, \(name)"
}
官方文档的说法是:
如果可选值是nil,则条件是false,并且大括号中的代码被跳过。否则,可选值被解包并分配给常数let,这使得解码值在代码块内可用。
个人理解可以为:如果optionalName的值可以赋给name,也就意味着optionalName不为nil,那么就走if内部的方法,否则就走else。(也有人翻译为:如果optionalName有值,解包它,并且将它的值赋值给name)
问题:“可选值被解包并分配给常数let”,这句话的“解包”是什么意思?不懂。 只知道将一个感叹号(!)加在可选类型变量名后面来解包这个可选类型的变量. 在Swift中, 这叫做硬解包. 即直接在可选类型后面加一个感叹号来表示它肯定有值.
点2
??运算符提供默认值。如果缺少可选值,则使用默认值。
let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"
为什么一定要赋值呢,这就涉及到什么是optional? Swift中声明的一个变量时, 默认情况下它是non-optional的, 即必须赋予这个变量一个非空的值. 如果给non-optional类型的变量赋值nil, 编译器就会报错。Swift的可选类型提供了在编译阶段就检查一些可能在运行时才会出现的常见错误的机制。
点3
swift的闭包(还没搞懂)
点4
swift中类和结构体的区别:
类是面向对象编程;结构体是面向协议编程(面向对象的升级)。
swift推荐在app中使用结构体(struct),类(class)在swift中不处于主流地位。
结构体能实现类的全部功能,同时结构体更模块化,它默认实现初始化方法及无需考虑内存管理(自动计数引用ARC)。
点5
Swift中的访问级别有以下五种:
open: 公开权限, 最高的权限, 可以被其他模块访问, 继承及复写。
public: 公有访问权限,类或者类的公有属性或者公有方法可以从文件或者模块的任何地方进行访问。那么什么样才能成为一个模块呢?一个App就是一个模块,一个第三方API, 第三等方框架等都是一个完整的模块,这些模块如果要对外留有访问的属性或者方法,就应该使用public的访问权限。public的权限在Swift 3.0后无法在其他模块被复写方法/属性或被继承。
fileprivate: 文件私有访问权限,被fileprivate修饰的类或者类的属性或方法可以在同一个物理文件中访问。如果超出该物理文件,那么有着fileprivate访问权限的类, 属性和方法就不能被访问。
private: 私有访问权限,被private修饰的类或者类的属性或方法可以在同一个物理文件中的同一个类型(包含extension)访问。如果超出该物理文件或不属于同一类型,那么有着private访问权限的属性和方法就不能被访问。
internal: 顾名思义,internal是内部的意思,即有着internal访问权限的属性和方法说明在模块内部可以访问,超出模块内部就不可被访问了。在Swift中默认就是internal的访问权限。