iOS学习iOS Developer程序员

Swift - 可选类型

2016-11-27  本文已影响118人  那儿_并不远
那儿_并不远

开篇

Swift基于脚本的编程语言,有着类似Ruby的优美,Python的易用性,同时又有较强的运行效率和安全性。
虽然Swift还处于一个过渡时期,但是现在已经非常非常明朗,已经是iOS开发的趋势了。有OC开发经验的同学们想要掌握Swift很容易,因为Swift中的很多概念OC中已经存在。
我在这里就不多写Swift的相关语法基础了,网上有很多优秀的博客文章,大家可以到网上查看学习(这里推荐:<a href ="http://c.biancheng.net/cpp/swift/jiaocheng/">Swift中文网</a>)
这篇博文我会把我对Swift中的可选类型的理解写出来,如果有不对的地方请大家多指教,共同进步。

可选类型


public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible {
    case None
    case Some(Wrapped)
    /// Construct a `nil` instance.
    public init()
    /// Construct a non-`nil` instance that stores `some`.
    public init(_ some: Wrapped)
    /// If `self == nil`, returns `nil`.  Otherwise, returns `f(self!)`.
    @warn_unused_result
    public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
    /// Returns `nil` if `self` is `nil`, `f(self!)` otherwise.
    @warn_unused_result
    public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?
    /// Create an instance initialized with `nil`.
    public init(nilLiteral: ())
}

大家可以看到Optional中有两种类型None和Some,所谓的nil就是None,非nil就是Some,Some中的Wrapped就是我们赋予变量的原始值。

// 定义一个变量 
var name :String? = "Swift"
println(name) 
// 输出为 “Swift”;
// 定义一个变量
var name :String?
println(name) 
// 输出为 nil;

(2)利用 “!” 声明变量

// 定义一个变量 
var name :String! = "Swift"
println(name) 
// 输出为 “Swift”;
// 定义一个变量
var name :String!
println(name) 
// 程序报错

总结

对 “?” 和 “!” 的理解:在我们对一个变量赋值时,我们会通过Some(T)进行装包,也就是把我们赋予的初始值包装到Optional中的Some下,当我们对变量进行取值时,我们系统会进行相应的解包,从Some中取出初始值。

上一篇 下一篇

猜你喜欢

热点阅读