Swift中的奇淫巧技

目錄
stride , self , typealias , zip

1>巧用 stride 循環</br>

stride 是 Strideable 協議中定義的一個方法, 它可以按照指定的遞進值生成一個序列。可以用在 Swift 的循環語法結構中。定義如下:


public func stride(to end:Self, by stride:Self.Stride) ->StrideTo<Self>
public func stride(through end:Self, by stride:Self.Stride) ->StrideThrough<Self>

這兩個方法的區別很簡單:(是否包含終點值)


for i in 0.stride(to:5, by:1) {
    print(i)//0,1,2,3,4
}
for i in 0.stride(through:5, by:1) {
    print(i)//0,1,2,3,4,5
}

那在循環中可以怎么用呢:

//(by:可以傳入循環的步長)
for i in 0.stride(through: 10, by: 3) {
    print(i) //0,3,6,9
}

這個寫法類似于 python 中的 for 循環寫法

for i in range(0,10,3):##(起始值,終止值, 步長)
    print(i) ##0,3,6,9

2>神奇的self

問題來源
這兩天微博上也有討論詳見

如果你的變量如果和 Swift 的關鍵字沖突的話,你可以使用' '包裹住變量名,這樣就可以用了

 self.saveButton.action { [weak self] _ in
     guard let `self` = self else { return }
     //do something
 }

3>typealias的一點小用法

之前寫過一篇來介紹 typealias的用法點擊查看</br>
現在在項目中有一點小更新,讓typealias更加好用,用 private 來定義 typealias, 實現代理方法的分離,讓項目結構更加清晰

private typealias Delegate = ViewController
extension Delegate: UITableViewDelegate {
    //delegate method
}

private typealias DataSource = ViewController
extension DataSource: UITableViewDataSource {
    //dataSource method
}

4>zip函數的一點小小用法

首先看看 zip 函數是怎么定義的

public func zip<Sequence1 : SequenceType, Sequence2 : SequenceType>(sequence1: Sequence1, _ sequence2: Sequence2) -> Zip2Sequence<Sequence1, Sequence2>

可以看到zip()函數接收兩個序列,并且返回一個Zip2Sequence類型的數據
但什么是 zip2Sequence呢?還是來個小例子來說明吧

let a = [1,2,3]
let b = ["one", "two", "three"]
let c = zip(a, b)

那么 c的值什么呢?

**? Swift.Zip2Sequence<Swift.Array<Swift.Int>, Swift.Array<Swift.String>>**
**  ? _sequence1: 3 elements**
**    - [0]: 1**
**    - [1]: 2**
**    - [2]: 3**
**  ? _sequence2: 3 elements**
**    - [0]: one**
**    - [1]: two**
**    - [2]: three**

這樣我們就可以拼一個 dictionary

var dic: [String: Int] = [:]
for (i, j) in ccc {
    dic[j] = i
}
**["one": 1, "three": 3, "two": 2]**

現在跳出 swift, 來看看 python 中的 zip 函數

x=['one','two','three']
y=[80,90,95]
d=dict(zip(x,y))
**[('bob', 80), ('tom', 90), ('kitty', 95)]

python 中的 zip 比 swift 簡便不少

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,223評論 4 61
  • 真的喜歡愛一個人,就會包容體諒她,無時無刻的保護愛護她,絕對不會利用她。 我們都被騙了,絕對的操作炒作。王寶強二樣...
    笑鷹阿閱讀 181評論 0 0
  • 詩人常怡閱讀 214評論 0 1