OK. 在 Swift 里也实现了这样一个功能的 assert () 函数,而且没有用到宏 (你骗人,明明用到了啊?!, 就是#if !NDEBUG 啊。 好吧,相信苹果 Swift 官方 Blog 在下一篇文章中应该会有相应的机制来判断当前的环境的,这里的意思是没用宏来实现表达式的延迟求值。),是怎么实现的呢?
首先在 Swift 里没有办法写一个函数,它接受一个表达式作为参数,但是却不执行它。比如,我们想这么实现:
Posted onIniOSWord count in article: 1.7kReading time ≈6 mins.
Swift 语言使用 var 定义变量,但和别的语言不同,Swift 里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错:
1 2 3 4 5
var stringValue : String //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashValue // ^ let hashValue = stringValue.hashValue
var myLabel: UILabel! //!相当于下面这种写法的语法糖 var myLabel: ImplicitlyUnwrappedOptional<UILabel>
那么 ! 大概也有两种使用场景
强制对 Optional 值进行拆包 (unwrap)
声明 Implicitly Unwrapped Optionals 值,一般用于类中的属性
Swift 是门新生的语言,我们有幸见证了它的诞生,激动之余也在佩服苹果大刀阔斧的推出一个新的语言替代一个已经比较成熟语言的魄力,今天在知乎日报上看到一个回答是说 Swift 是一门玩具语言,正当想去吐槽,发现回答已经被删除了。个人认为苹果是很认真的推出 Swift 的,从 Swift 的各种细微的设计也能看的出来。
另外这两个小符号就花费了我不少的时间来理解,可能依然会有错误和不妥之处,欢迎大家指正,本文旨在抛砖引玉。除此之外,Swift 还有很多很棒的特性,WWDC 2014 会有四五个和 Swift 语言相关的 Video,大家也可以去关注一下。