Swift 指北

套话


Swift 包含了 C 和 Objective-C 上所有基础数据类型,Int 表示整型值; Double 和 Float 表示浮点型值; Bool 是布尔型值;String 是文本型数据。 Swift 还提供了三个基本的集合类型,Array、Set 和 Dictionary

除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。
Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示 “那儿有一个值,并且它等于 x ” 或者 “那儿没有值” 。可选有点像在 Objective-C 中使用 nil ,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的 nil 指针更加安全也更具表现力,它是 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")

(404, “Not Found”) 元组把一个 Int 值和一个 String 值组合起来表示 HTTP 状态码的两个部分:一个数字和一个人类可读的描述。这个元组可以被描述为“一个类型为 (Int, String) 的元组”。
你可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型。只要你想,你可以创建一个类型为 (Int, Int, Int) 或者 (String, Bool) 或者其他任何你想要的组合的元组。
你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:

可选类型

使用 可选类型(optionals) 来处理值可能缺失的情况。可选类型表示两种可能: 或者有值, 你可以解析可选类型访问这个值, 或者根本没有值。

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

可选绑定

使用 可选绑定(optional binding) 来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 if 和 while 语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。if 和 while 语句,请参考 控制流。

运算符

空合运算符

空合运算符(a ?? b)将对可选类型 a 进行空判断,如果 a 包含一个值就进行解包,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。
空合运算符是对以下代码的简短表达方法:

a != nil ? a! : b

区间运算符

闭区间运算符

闭区间运算符(a…b)定义一个包含从 a 到 b(包括 a 和 b)的所有值的区间。a 的值不能超过 b。

半开区间运算符

半开区间运算符(a…<b)定义一个从 a 到 b 但不包括 b 的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值

单侧区间

闭区间操作符有另一个表达形式,可以表达往一侧无限延伸的区间

字符串和字符

多行字符串字面量

如果你需要一个字符串是跨越多行的,那就使用多行字符串字面量 — 由一对三个双引号包裹着的具有固定顺序的文本字符集

let quotation = """
The White Rabbit put on his spectacles.  "Where shall I begin,
please your Majesty?" he asked.

"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""

扩展字符串分隔符

您可以将字符串文字放在扩展分隔符中,这样字符串中的特殊字符将会被直接包含而非转义后的效果。将字符串放在引号(“)中并用数字符号(#)括起来。例如,打印字符串文字 #“Line 1 \nLine 2”# 会打印换行符转义序列()而不是给文字换行。
如果需要字符串文字中字符的特殊效果,请匹配转义字符(\)后面添加与起始位置个数相匹配的 # 符。 例如,如果您的字符串是 #“Line 1 \nLine 2”# 并且您想要换行,则可以使用 #“Line 1 #nLine 2”# 来代替。 同样,###“Line1 ###nLine2”### 也可以实现换行效果。
扩展分隔符创建的字符串文字也可以是多行字符串文字。 您可以使用扩展分隔符在多行字符串中包含文本 “””,覆盖原有的结束文字的默认行为

let threeMoreDoubleQuotationMarks = #"""
Here are three more double quotes: """
"""#

字符串可变性

你可以通过将一个特定字符串分配给一个变量来对其进行修改,或者分配给一个常量来保证其不会被修改:

var variableString = "Horse"
variableString += " and carriage"
// variableString 现在为 "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander"
// 这会报告一个编译错误(compile-time error) - 常量字符串不可以被修改。

相关推荐

  1. Swift

    2024-02-19 05:48:04       52 阅读
  2. React Hooks学习

    2024-02-19 05:48:04       50 阅读
  3. React Hooks学习

    2024-02-19 05:48:04       52 阅读
  4. Python入门学习

    2024-02-19 05:48:04       61 阅读
  5. Python入门

    2024-02-19 05:48:04       56 阅读
  6. Python入门

    2024-02-19 05:48:04       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 05:48:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 05:48:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 05:48:04       82 阅读
  4. Python语言-面向对象

    2024-02-19 05:48:04       91 阅读

热门阅读

  1. DP进阶之最长递增子序列

    2024-02-19 05:48:04       62 阅读
  2. 【npm】npm镜像源及命令

    2024-02-19 05:48:04       50 阅读
  3. opencv进行人脸识别

    2024-02-19 05:48:04       48 阅读
  4. 企业面临的网络安全风险及应对策略

    2024-02-19 05:48:04       44 阅读
  5. 洛谷 P8630 [蓝桥杯 2015 国 B] 密文搜索

    2024-02-19 05:48:04       43 阅读
  6. npm详解:掌握package.json配置

    2024-02-19 05:48:04       50 阅读
  7. js-后端返回参数前端动态切换样式

    2024-02-19 05:48:04       43 阅读
  8. Python函数——函数介绍

    2024-02-19 05:48:04       55 阅读
  9. 不同编程网站应当注意的点

    2024-02-19 05:48:04       52 阅读
  10. C++入门

    C++入门

    2024-02-19 05:48:04      44 阅读
  11. 从零开始学HCIA之广域网技术01

    2024-02-19 05:48:04       45 阅读
  12. Deep深度系统下载安装Beyond compare4

    2024-02-19 05:48:04       56 阅读