Swift 中的 Optional 与 C# 可空类型

2014-11-24 白若水 更多博文 » 博客 » GitHub »

原文链接 http://inskyline.com/ios/2014/11/24/a-ios-OptionalType.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


Swift可以说吸取众语言之长,在它的数据类型和语法结构等方面都可以看到其他语言的影子。下面主要谈Optional类型。

Optional类型,是 swift 中为了保证强类型的类型安全特意预设的一个泛型。

显式定义

var intOption:Int?

intOption=10;

println("\(intOption)") //这样并不能获取到值 Optional(10)
println("\(intOption!)") //通过“感叹号”取到值

var integerOption:Optional<Int>  //和上面的方式等价
integerOption=12

隐式定义

var name:String!
name="中国"

println("\(name)")

var nation:ImplicitlyUnwrappedOptional<String>

nation="印度"

隐式定义和显式定义的区别在应用层面主要在获取值的方式上。隐式获取值相对方便一点。

Optional类型在 swift 好多函数和方法中,被大量使用。

例如:

var value="1233d"

var intValue=value.toInt()

if(intValue != nil){
    println("\(intValue!)")
}
else{
    println("不是正确的数字")
}

再温习以下C# 可空类型.

C#中也是两种定义方式。功能上和 Swift Optional类型很像。

            //这两种方式唯一的区别是前面的是后面的简写
            int? intValue;
            Nullable<int> integerValue;

            intValue=12;
            integerValue=12;
            int value=12;
            if(intValue==integerValue){
                Console.WriteLine("True");
            }

            if(intValue==value){
                Console.WriteLine("True");
            }
            else{
                Console.WriteLine("False");
            }

            if(integerValue.HasValue){

            }