关于 Swift


title: 关于 Swift

  • Swift 简介
  • 类型安全与行推断
  • 元组
  • 字符串插值
  • 可选类型

Swift 简介

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 类型

元组

元组是 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"

字符串插值

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

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

可选类型

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)