Swift学习笔记之基本运算符(一)
简介学习的swift感觉是那么的爽!下面开始今天学的Swift的基本运算符。 Nil Coalescing Operatora ?? b 中的?? 就是空值合并运算符,会对a进行判断,如果不为nil 则解包,否则就返回b。 var a: String? = "a"
var b: String? = "b"
var c = a ?? b // 输出的结果为Optional("a")
a = nil
c = a ?? b //输出的结果为Optional("b")
b = nil
c = a ?? b ?? "c" //输出的结果为Optional("c")
使用的时候有以下两点要求:
也就是说,a一定要有被备胎的可能,b一定要有做备胎的资格。 a != nil ? a! : b 或者 a == nil ? b :a!
当然你也可以通过自定义运算符来实现: infix operator |||{}
func |||<T> (left: T?,right: T) ->T {
if let l = left {
return l
}
return right
}
var a:String?
var b = "b"
var c = a ||| b //输出结果为b
C#中也有个??,感兴趣的可以去了解一下。 Range Operator区间运算符氛围闭区间(…)和左闭右开区间(..<)两种,前者是算头算尾,后者是算头不算尾 switch aNumber {
case 0...5:
println("This number is between 0 and 5")
case 6...10:
println("This number is between 6 and 10")
default:
println("This number id not between 1 and 10")
}
区间运算符其实返回的是一个Range 对象,是一个连续五关联序列索引的集合。 infix operator .. { associativity none precedence 135}
func .. (lhs: Int,rhs:Int) -> Range<Int> {
return lhs..<rhs
}
for i in 1..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 的结构体, 可以用来遍历Range中的值。 区间运算符返回的是一个ClosedInterval 或者 HalfOpenInterval 的东西,类型只要是Comparable就可以了。所以我们也可以把String放到…里。 比如猫神的Swifter Tips 中一章的代码如下,通过String的ClosedInterval来输出字符串的小鞋字母: let test = "Hello"
let interval = "a"..."z"
for c in test {
if interval.contaains(String(c)) {
println("(c)")
}
}
SubStringRuby 中用…来获取SubString的方法很方便: 2.1.3 :001 >a ="abc"
=> "abc" 2.1.3 :002 > a[0]
=> "a" 2.1.3 :003 >a[0..1]
=> "ab"
而Swift终的ClosedInterval是没有subscript的。但是任性的我们就是要用[1…3]这种方法怎么办呢?自己动手丰衣足食,写个extension吧,只需要加个subscript久可以了,然后下标的类型是Range就可以了: extension String {
subscript (r: Range<Int>) -> String {
get{
let startIndex = advance(self.startIndex,r.startIndex)
let endIndex = advance(startIndex,r.endIndex - r.startIndex)
return self[Range(start: startIndex,end:endIndex)]
}
}
}
var s = "Hello,playground"
println(s[0...5]) // ==> "Hello,"
println(s[0..<5]) // ==> "Hello"
如果要搜索目标字符串之后再街区substring可以这样: let name = "Hello csdn"
let start = name.startIndex
let end = find(name," ")
if(end != nil){
let firstName = name[start..<end!]
}else{
// no space found
}
References
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |