美文网首页
关于 Swift

关于 Swift

作者: Sias_Orange | 来源:发表于2017-12-27 18:26 被阅读26次

    title: 关于 Swift

    <div id="Swift 简介">Swift 简介</div>

    Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。即便如此,如果你有 C 或 者 Objective­C 开发经验,你会发现 Swift 的有很多你熟悉的内容。

    和 C 语言类似,Swift 使用变量来进行存储并通过变量名来关联对应的值。在 Swift 中,不 可变的变量非常常用,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要 处理的值不需要改变,那使用常量可以让你的代码更加安全并且更清晰地表达你的意图。
    除了我们熟悉的类型,Swift 还增加了 Objective­C 中没有的高阶数据类型, 比如元组 Tuples 。元组可以让你创建或者传递一组数据,当函数需要返回单一复合值时,你可以用
    一个元组可以返回多个值。

    Swift 还增加了 Optional 类型(译者注: Optional类型即可选类型),用于处理值不存在的情 况。可选的意思是 “这里有一个值,并且它等于x ” 或 “这里没有值” 。可选有点像在 Objective­C中使用nil ,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective­C 中的 nil 指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部 分。

    类型安全与行推断

    Swift 是一个类型安全(type­safe)语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个 String ,你绝对不可能错误地传进去一个 Int 。 由于Swift是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并
    把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。

    当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常 量和变量的时候都需要显式指定类型。如果你没有显式指定类型,Swift 会使用 类型推断 (type inference)来选择合适的类型。有了类型推断,编译器可以在编译代码的时候自 动推断出表达式的类型。原理很简单,只要检查你赋的值即可。
    因为有了类型推断,和 C 或者 Objective­C 比起来 Swift 很少需要声明类型。常量和变量虽 然需要明确类型,但是大部分工作并不要你自己来完成。

    当你声明常量或者变量并赋初值的时候类型推断非常有用。当你在声明常量或者变量的时候 赋给它们一个确定值(literal valueliteral)即可触发类型推断。(字面量就是会直接出现 在你代码中的值,比如 423.14159 。)
    例如,如果你给一个新常量赋值 42 并且没有标明类型,Swift 可以推断出常量类型是Int ,因为你给它赋的初始值看起来像一个整数:

    let meaningOfLife = 42 //meaningOfLife会被推测为 Int 类型
    // oc 写法
    Int a = 42
    

    同理,如果你没有给浮点数标明类型,Swift 会推断你想要的是 Double :

    let pi = 3.1415926 // pi 会被推断为 Double 类型
    

    当推断浮点数的类型时,Swift 总是会优先选择 Double 而不是 Float 。如果表达式中同时 出现了整数和浮点数,会被推断为 Double 类型:

    let anotherPi = 3 + 0.1415926 // anotherPi 会被推测为 Double 类型
    

    <div id="元组">元组</div>

    元组是 Swift 中的新类型, 元组 tuples 把多个值组合成一个复合值. 元组的值可以使任意类型的值, 但不要求是相同类型.
    下面这个例子中,( 404, "Not Found" )是一个描述 HTTP 状态码HTTP status code 的元组。HTTP 状态码是当你请求网页的时候 web 服务器返回的一个特定值。如果你请求的网页 不存在就会返回一个 404 Not Found 状态码。

     let http404Error = (404, "Not Found") // http404Error 的类型是 (Int, String),值是 (404, "Not Found")
     print (http404Error.0) // 404
     print (http404Error.1)  // "Not Found"
    

    <div id="字符串插值">字符串插值</div>

    字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。字符串字面量和多行字符串字面量都可以使用字符串插值。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:

    let multiplier = 3
    let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
    // message 是 "3 times 2.5 is 7.5"
    

    <div id="可选类型">可选类型</div>

    C 和 Objective-C 中并没有可选类型这个概念。最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选类型可以让你暗示任意类型的值缺失,并不需要一个特殊值。

    使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示:

    1. 有值, 等于 x
    2. 没有值 为 nil
    let possibleNumber = "123"
    let convertedNumber = Int(possibleNumber)
    // convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
    

    Swift 的 nil 和 Objective-C 中的 nil 并不一样。在 Objective-C 中,nil 是一个指向不存在对象的指针。在 Swift 中,nil 不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为 nil,不只是对象类型。

    相关文章

      网友评论

          本文标题:关于 Swift

          本文链接:https://www.haomeiwen.com/subject/hstpgxtx.html