标签:style http io color ar os 使用 sp for
今天主要看的内容是 Swift 中的基本运算符。记录一下。
a ?? b
中的 ??
就是是空值合并运算符,会对 a
进行判断,如果不为 nil
则解包,否则就返回 b
。
使用的时候有以下两点要求:
- a 必须是 optional 的
- b 必须和 a 类型一致
也就是说,a 一定要有被备胎的可能,b 一定要有做备胎的资格。
其实也就是对三目运算符的简写:
a != nil ? a! : b
或者 a == nil ? b : a!
区间运算符分为闭区间 (...
) 和左闭右开区间 (..<
) 两种,前者是算头算尾,后者是算头不算尾。
区间运算符其实返回的是一个 Range<T>
对象,是一个连续无关联序列索引的集合。
话说以前左闭右开是 ..
,这样和 Ruby 的就刚好完全相反了。。。
不过有人就是想用 ..
,那么可以这样自己写一个:
infix operator .. { associativity none precedence 135}
func .. (lhs: Int, rhs: Int) -> Range<Int> {
return lhs..<rhs
}
for i in 0..10 {
println(“index \(i)”)
}
你也可以用 generate() 来遍历:
var range = 1…4
var generator = range.generate() // {startIndex 1, endIndex 5}
generator.next() // 1
generator.next() // 2
generator.next() // 3
generator.next() // 4
generator.next() // nil
.generate()
返回一个 RangeGenerator<T>
的结构体,可以用来遍历 Range<T>
中的值。
以前还有个 (5...1).by(-1)
的用法,不过现在好像没用了。
三、其他
嗯今天时间有限就先写这些吧。
总的来说运算符方面基本没太多差别,倒是区间部分有点像是 Ruby或Haskell 的语法,不过在 Haskell 中Range 可以这样用:
ghci> [‘a’..’z’]
“abcdefghijklmnopqrstuvwxyz”
而在 Swift 里,...
这三个点似乎把字符串拼接起来了:
let bb = [“a”…“z”]
println(bb[0]) // 打印 [“a…z”]
试验一下,确实是这样,...
可以把两个字符串拼接起来:
let bb = “a”…“z”
println(bb)// 打印:”a…z”
嗯今天就先到这里,睡觉。
标签:style http io color ar os 使用 sp for
原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/41222837