Swift中的奇淫巧技

作者: 一铭_ | 来源:发表于2016-08-15 14:43 被阅读666次

目录
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 简便不少

相关文章

  • Swift中的奇淫巧技

    目录stride , self , typealias , zip 1>巧用 stride 循环
    str...

  • 奇淫巧技

    input type=file 手机浏览器打开相机 input 元素type=file时 ios内核浏览器默认事件...

  • 开发奇淫巧技

    1.手机在脱离xcode后,重新连接数据线,打开 Debug-attachToProcess,把当前运行进程关联上...

  • JS 奇淫巧技

    作者 | Before Semicolon 译者 | 王强 来源 | 前端之巅 写代码的时候总有一些东西是会重...

  • iOS中实用小技巧

    iOS开发中的★奇淫巧技★ - iOS开发论坛 - 51CTO技术论坛_中国领先的IT技术社区

  • Mysql的奇淫巧技

    ``` ###查看时区 show variables like '%time_zone%'; ###日期转为时间戳...

  • Python奇技淫巧—[1]—在列表、字典、集合中根据条件筛选数

    Python奇淫巧技——在列表、字典、集合中根据条件筛选数据 通用做法:迭代 以列表为例: 筛选出下列数字大于等于...

  • MAC tkinter # If this fails your

    找了半天折腾各种奇淫巧技,最后其实很简单 在mac 命令行执行: brew install python-tk 就...

  • Visual Studio Code 奇淫巧技

    之前一直在用sublime Text 3 做编辑器,无奈一直弹窗让我购买,懒得破解了。根据廖雪峰老师的建议,体验了...

  • Java奇淫巧技之 Lombok

    lombok是一个通过简单的 注解 的形式来简化消除一些必须但显得很臃肿的 Java 代码的工具 简单来说,比如我...

网友评论

    本文标题:Swift中的奇淫巧技

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