Swift学习笔记之基本运算符(一)

Swift学习笔记之基本运算符(一),第1张

概述简介 学习的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 = 简介

学习的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 = nilc = 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...4var generator = range.generate()      //{startIndex 1,endindex 5}generator.next() //1generator.next() //2generator.next() //3generator.next() //4generator.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.startIndexlet end = find(name," ")if(end != nil){    let firstname = name[start..<end!]}else{    // no space found}
References Swift Operators GitHup callmewhy’s Swift90days 总结

以上是内存溢出为你收集整理的Swift学习笔记之基本运算符(一)全部内容,希望文章能够帮你解决Swift学习笔记之基本运算符(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1085768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存