美文网首页
Swift4 - 基础小tip

Swift4 - 基础小tip

作者: 暗物质 | 来源:发表于2020-04-29 17:27 被阅读0次

# switch tip

switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。

case let x where x.hasSuffix("pepper")

let vegetable = "red pepper"
switch vegetable {
case "celery":
    print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
    print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
    print("Is it a spicy \(x)?")
default:
    print("Everything tastes good in soup.")
}

# while tip

至少循环一次用 repeat {} while

//使用 while 来重复运行一段代码直到条件改变。
var n = 2
while n < 100 {
    n *= 2
}
print(n)

//循环条件也可以在结尾,保证能至少循环一次。
var m = 2
repeat {
  m *= 2
} while m < 100

# 元组

使用元组来生成复合值,比如让一个函数返回多个值。该元组的元素可以用名称或数字来获取。

let (x, y) = (1, 2)
// 现在 x 等于 1,y 等于 2

如果两个元组的元素相同,且长度相同的话,元组就可以被比较。比较元组大小会按照从左到右、逐值比较的

(1, "zebra") < (2, "apple")   // true,因为 1 小于 2
(3, "apple") < (3, "bird")    // true,因为 3 等于 3,但是 apple 小于 bird
(4, "dog") == (4, "dog")      // true,因为 4 等于 4,dog 等于 dog
("blue", false) < ("purple", true) // 错误,因为 < 不能比较布尔类型

Swift 标准库只能比较七个以内元素的元组比较函数。如果你的元组元素超过七个时,你需要自己实现比较运算符。

# 数值型类型转换

通常来讲,即使代码中的整数常量和变量已知非负,也请使用 Int 类型。总是使用默认的整数类型可以保证你的整数常量和变量可以直接被复用并且可以匹配整数类字面量的类型推断。

只有在必要的时候才使用其他整数类型,比如要处理外部的长度明确的数据或者为了优化性能、内存占用等等。使用显式指定长度的类型可以及时发现值溢出并且可以暗示正在处理特殊数据。

#typealias

当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.max

#可选类型

解析方式

if assumedString != nil {
    print(assumedString!)  强制解析
}
if/guard let/var definiteString = assumedString {
    print(definiteString)
}

空合运算符(a ?? b)将对可选类型 a 进行空判断,如果 a 包含一个值就进行解包,否则就返回一个默认值 b
空合运算符是对以下代码的简短表达方法:
a != nil ? a! : b

let defaultColorName = "red"
var userDefinedColorName: String?   //默认值为 nil

var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red"

#断言

断言仅在调试环境运行。在生产环境中,断言的条件将不会进行评估。这个意味着你可以使用很多断言在你的开发阶段,但是这些断言在生产环境中不会产生任何影响。

使用断言进行调试

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发

如果代码已经检查了条件,你可以使用 assertionFailure(_:file:line:) 函数来表明断言失败了,例如:

if age > 10 {
    print("You can ride the roller-coaster or the ferris wheel.")
} else if age > 0 {
    print("You can ride the ferris wheel.")
} else {
    assertionFailure("A person's age can't be less than zero.")
}

#强制执行先决条件

当一个条件可能为假,但是继续执行代码要求条件必须为真的时候,需要使用先决条件。例如使用先决条件来检查是否下标越界,或者来检查是否将一个正确的参数传给函数。

// 在一个下标的实现里...
precondition(index > 0, "Index must be greater than zero.")

# 区间运算符

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

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

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("第 \(i + 1) 个人叫 \(names[i])")
}
// 第 1 个人叫 Anna
// 第 2 个人叫 Alex
// 第 3 个人叫 Brian
// 第 4 个人叫 Jack

单侧区间
闭区间操作符有另一个表达形式,可以表达往一侧无限延伸的区间 —— 例如,一个包含了数组从索引 2 到结尾的所有值的区间:

for name in names[2...] {
    print(name)
}
// Brian
// Jack

for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian

for name in names[..<2] {
    print(name)
}
// Anna
// Alex

查看一个单侧区间是否包含某个特定的值
let range = ...5
range.contains(7)   // false
range.contains(4)   // true
range.contains(-1)  // true

相关文章

  • Swift4 - 基础小tip

    # switch tip switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。 case...

  • swift4-字典转模型的一些总结

    使用swift4提供的新特性Codable来实现字典转模型 写在前面,使用过程中要知道的几个小知识点 tip1:如...

  • 小程序 Tip | 基础概述

    框架结构 一般软件的应用架构: 微信小程序是一套系统的展示层; 小程序项目目录结构 wxml 类比 html 页...

  • Objective-C 基础小Tip

    Objective-C 基础小Tip instancetype 关键字,它可以表示一个方法的相关返回类型。例如: ...

  • 小tip

    在命令行里面添加文本按键盘i键转换到文本输入输入 文本输入完毕,按ESC 键,然后按:wq 保存后退出 友盟分享中...

  • 小tip

    今天早晨的电梯里很拥挤,出来电梯后我却特别注意到一个男士的上衣背面衣服上沾了一长条白色的胶带状的东西,再一看,被隐...

  • 在 Xcode 中优化 todo 的 5 个小 Tip

    在 Xcode 中优化 todo 的 5 个小 Tip在 Xcode 中优化 todo 的 5 个小 Tip

  • 登录小tip

    当我们有时候在写登录的逻辑时,先涉及到检验用户名,密码,验证码是否为空,在根据相应的空缺依次提示,当然在提示的时候...

  • vue小tip

    遇到了哪些就更,如果你也有一些小tip,可以评论里留下简述,我来整理 router-link active-cla...

  • 早起小tip

    ##心理准备 鸡汤类材料输入,如《一流成功人士早餐前都做什么 /What the Most Successful ...

网友评论

      本文标题:Swift4 - 基础小tip

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