排序
类型(三) – 数组
排序 只要数组存储的元素类型采用了 Comparable 协议,就可以使用 sorted() 和sort() 方法,前者返回一个已排序的数组,后者修改数组。 var names = ['Taylor', 'Timothy', 'Tyler', 'Thomas', ...
SwiftData 调试
SwiftData 在调试时可以直接在输出窗口显示对应的 SQL 语句。 设置方法 点击如下的按钮,弹出 Scheme 窗口 在弹出的Scheme 窗口中,选择 Run菜单,然后选择 Argument 标签页,点击+号按钮。 然...
Minesweeper
如果你想继续学习本教程,请使用 App template 创建一个新的 macOS 项目,并将其命名为 Minesweeper。 显示网格 我们的第一步将是显示一个包含棋盘整体布局的方格网格。这些方格中的所有内容都...
Kana Quest
这个 app 用来学习日语中的平假名(hiragana)与片假名(katakana)。 基本用户界面 这个项目的 assets.zip 压缩文件,包含两个重要的文件: kana.json 文件包含我们要使用的所有日语字符。 Bundle-...
模式(一) – MVVM
MVVM 工作原理 MVVM - 模型、视图、ViewModel,理解 MVVM 的最佳方式是这样的:除了创建一个新类 ViewModel 负责将模型中的数据转换为视图中的格式化值之外,它与 MVC 别无二致。 MVVM 模式由三...
错误
错误基础知识 所有要抛出的错误都必须是符合Error协议的枚举。 enum PasswordError: Error { case empty case short } 错误可以添加关联值 enum PasswordError: Error { case empty case short ...
函数与闭包
可变函数 可变函数是一种不确定迭代的函数,也就是你发送多少参数,它就接受多少参数。 func add(numbers: Int...) -> Int { var total = 0 for number in numbers { total += number } retu...
引用类型和值类型
两者区别 布尔、数字、字符串、数组、字典、结构体等都是 Swift 中的值类型。类是引用类型,闭包也是引用类型。 引用类型在分配时是共享的,指向同一条数据,可以有多个所有者;值在分配时是复...
类型(六) – 泛型
func inspect<T>(_ value: T) { print('Received \(type(of: value)) with the value \(value)') } inspect('Haters gonna hate') inspect(56) 限制泛型 func square<T: Numeric>(_...