目錄
stride ,self
, typealias , zip
1>巧用 stride 循環(huán)</br>
stride 是 Strideable 協(xié)議中定義的一個(gè)方法腰涧, 它可以按照指定的遞進(jìn)值生成一個(gè)序列「『蹋可以用在 Swift 的循環(huán)語(yǔ)法結(jié)構(gòu)中糠馆。定義如下:
public func stride(to end:Self, by stride:Self.Stride) ->StrideTo<Self>
public func stride(through end:Self, by stride:Self.Stride) ->StrideThrough<Self>
這兩個(gè)方法的區(qū)別很簡(jiǎn)單:(是否包含終點(diǎn)值)
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
}
那在循環(huán)中可以怎么用呢:
//(by:可以傳入循環(huán)的步長(zhǎng))
for i in 0.stride(through: 10, by: 3) {
print(i) //0,3,6,9
}
這個(gè)寫(xiě)法類(lèi)似于 python 中的 for 循環(huán)寫(xiě)法
for i in range(0,10,3):##(起始值,終止值, 步長(zhǎng))
print(i) ##0,3,6,9
2>神奇的self
問(wèn)題來(lái)源
這兩天微博上也有討論詳見(jiàn)
如果你的變量如果和 Swift 的關(guān)鍵字沖突的話娄涩,你可以使用' '包裹住變量名嘲驾,這樣就可以用了
self.saveButton.action { [weak self] _ in
guard let `self` = self else { return }
//do something
}
3>typealias的一點(diǎn)小用法
之前寫(xiě)過(guò)一篇來(lái)介紹 typealias的用法點(diǎn)擊查看</br>
現(xiàn)在在項(xiàng)目中有一點(diǎn)小更新,讓typealias更加好用,用 private 來(lái)定義 typealias, 實(shí)現(xiàn)代理方法的分離,讓項(xiàng)目結(jié)構(gòu)更加清晰
private typealias Delegate = ViewController
extension Delegate: UITableViewDelegate {
//delegate method
}
private typealias DataSource = ViewController
extension DataSource: UITableViewDataSource {
//dataSource method
}
4>zip函數(shù)的一點(diǎn)小小用法
首先看看 zip 函數(shù)是怎么定義的
public func zip<Sequence1 : SequenceType, Sequence2 : SequenceType>(sequence1: Sequence1, _ sequence2: Sequence2) -> Zip2Sequence<Sequence1, Sequence2>
可以看到zip()函數(shù)接收兩個(gè)序列,并且返回一個(gè)Zip2Sequence類(lèi)型的數(shù)據(jù)
但什么是 zip2Sequence呢?還是來(lái)個(gè)小例子來(lái)說(shuō)明吧
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**
這樣我們就可以拼一個(gè) dictionary
var dic: [String: Int] = [:]
for (i, j) in ccc {
dic[j] = i
}
**["one": 1, "three": 3, "two": 2]**
現(xiàn)在跳出 swift, 來(lái)看看 python 中的 zip 函數(shù)
x=['one','two','three']
y=[80,90,95]
d=dict(zip(x,y))
**[('bob', 80), ('tom', 90), ('kitty', 95)]
python 中的 zip 比 swift 簡(jiǎn)便不少