Swift4.2画"图"(Graph)

看看你需要啥:

  • 一些编程基础
  • 一台装了Xcode的mac或者装了SwiftPlayground的iPad
  • 学习能力
  • 没了
  • 不,还有“图”是啥

30秒学会图

与图有关的概念

  • 一个图是多个顶点与他们的连边的集合,因此我们只需要描述顶点和边
  • 连边可以有方向,也可以没有,比如单行道
  • 连边可以有权重,也可以没有,比如道路的距离

怎样实现图结构

  • 顶点可以存储在数组或链表中
  • 边可以存储在以顶点为head的链表中,也可以用二维数组表示顶点和边
(更多…)

Swift4.2:Nil cannot be assigned to type 'UnsafeMutablePointer'与Optional chaining

由于直接抱着对其他语言的认识来使用swift,这个问题苦恼了我很久,当我用关键词“swift 空指针”搜索也没有得到有用信息,直到我发现swift一定要对可能为空的变量做标记——Optional(?&!)。

Optional Chaining(可选类型)

https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html

在C和Objective-C中不存在可选类型,可以也只能用传统方式处理空值,Swift引入可选类型专为处理值可能为空的情况。

声明

声明变量时后面加上?或!,他们的主要区别是用?更优雅。。。

The main difference is that optional chaining fails gracefully when the optional is nil, whereas forced unwrapping triggers a runtime error when the optional is nil.

传值

用!声明Optional变量意味着ta总是被forced unwraping(强制解析):传值时不用加!,如果运行中访问没有值的变量,程序就会崩溃。

用?声明的Optional变量在传值时有两种选择:使用时后面加??提供默认值以替代值可能为nil的情况,或者使用的时候后面加上!,那么情况就和上文一样了。

拓展

判断Optional变量是否为空,可以用if:

if var1 = nil{}

也可以申请一个局部变量(这里假设property1是Optional变量):

if let var1 = obj1.property1? {
    print("\(var1) exists.")
} else {
    print("Nothing.")
}