本文共 995 字,大约阅读时间需要 3 分钟。
作者:李宁
Swift 的作者 Chris 在硕士毕业时提出了一套完整的运行时编译思想,奠定了 LLVM 的发展基础。
从 OS X 10.9 和 Xcode 5 开始,LLVM+GCC 已经被替换成了 LLVM+CLang 。
Swift 虽然本身是静态语言,是一门类型安全的语言,但其吸取了很多编程语言的优点,同时具备了很多动态语言的语法特性和交互方式。
在实际使用时,你能真切的感觉到其的灵活性,但是过于灵活真的好么?有时候,选择太多,反而会使整体代码显得杂乱。
在其他语言中,函数要返回多个值,则需要返回一个对象或结构体指针,而在 Swift 中可以通过返回元祖来实现多个值的返回。
可选变量的引入解决了大部分需要显示处理的异常,这部分工作由编译器完成。
很难说这个类型的使用简化了编程,你需要对所有可能为空的变量进行判断,然后决定是否使用。如果强制解包的时候,变量意外为 nil ,那同样为产生异常。
当 Swift 编译器在检测到数组中的的所有元素类型都相同时,就会将变量或常量类型设为 Swift 中的数组类型 Array ,否则,则设为 NSArray 类型。这种套路对于 Dictionary 和 NSDictionary 同样适用。
如此,便可以理解为何不能使用 as 将 [Any] 转为 Array 类型了。
var test:NSMutableDictionary = ["name":"bill","age":50];test.addEntries(from: ["sex":"man"])let test:NSMutableDictionary = ["name":"bill","age":50];test.addEntries(from: ["sex":"man"])
通过上面的对比,可以判断出 var 和 let 只是对其后的变量进行修饰,决定其是否可以被变更,对其实际变量类型所包含的值能否变更并无约束力。
在闭包中可以定义捕获列表,列出闭包中使用到的闭包外的所有变量,至于其是弱引用还是无主引用,则可以通过 unowned
来指定。
无主引用修饰的变量是不会自动置为 nil 的,也就意味着,使用无主引用修饰变量时,你需要确定该变量被使用时,其指向的实例是肯定存在的,即它总是在包含有无主引用变量的实例释放后释放。
转载地址:http://wvdws.baihongyu.com/