Swift学习笔记之基本运算符(一)
2015-08-08 14:23
423 查看
简介
学习的swift感觉是那么的爽!下面开始今天学的Swift的基本运算符。Nil Coalescing Operator
a ?? 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必须是optioal的
b必须和 a类型一致
也就是说,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中:
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)") } }
SubString
Ruby 中用…来获取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
Swift OperatorsGitHup callmewhy’s Swift90Days
相关文章推荐
- swift 广播
- swift新手入门视频教程-08-枚举
- [IOS] Swift enum and Struct
- iPhone开发入门系列2(iOS8+Swift版)备忘录APP学习01
- Swift学习笔记(二十三)——Swift泛型初识
- Swift学习笔记(二十二)——字典的基本操作
- Swift学习笔记(二十一)——字典
- Swift编程语言学习4.1——周期
- iOS- Swift:如何使用iOS8中的UIAlertController
- swift封装的跑马灯效果
- Swift学习笔记(二十)——数组的基本操作
- [ios] Swift Closure(闭包)
- swift 代码加载xib storyboard
- swift学习笔记
- 【Swift】沙盒缓存
- Ray Wenderlich的swift教程01--推荐资料
- [ios] Swift Basis
- iOS开发实战教学:在Swift怎样创建CocoaPod?
- iPhone开发入门系列1(iOS8+Swift版)天天打靶APP学习15-16
- swift2.0学习之拓展