對于我來說,Swift已經不是一門陌生的語言了,不過這幾天聽波哥講Swift4.0,又對Swift這門語言有了進一步的了解。
本次內容有:
- 元的操作符進一步理解與代碼規范 ?
- 字符與字符串在Swift4.0中的新特性
- 字符串索引
- 數組的高階操作(閉包+函數式編程)?
- Set類型的更多操作與方法
元的操作符進一步理解與代碼規范
元的操作符:操作幾個對象就叫幾元操作符 比如:
let b = 1
let a = b
上面的=
就是一個操作符,它操作了a
和b
兩個對象,所以=
是二元操作符 再比如:
-b
代碼中的-
就是一個操作符,它只對b
一個對象進行了操作(取它的相反數)所以-
是一元操作符
代碼規范:二元操作符操作2個目標,在2個目標之間,前后用空格分隔.比如:3 + 4
;+
操作了3和4兩個對象,所以用空格分開。
字符與字符串在Swift4.0中的新特性
字符與字符串在Swift4.0中的新特性有一下2點:
- 支持多行字符串(對前端開發效率大大提高)
多行字符串:使用"""輸入你要的多行字符串"""
使用一組三個"
來創建。舉個例子:
let poem = """
浩蕩離愁白日斜,
吟鞭東指即天涯。
落紅不是無情物,
化作春泥更護花。
"""
print(poem)
在Xcode9中看看輸出結果。自動加了換行。
- 計算字符串字符總數方法簡化
在Swift3.0中,對字符串計數是這樣的:
poem.characters.count
在Swift4.0中,是這樣的:
poem.count
字符串索引
字符串索引并不常用,為了更熟悉Swift語言,決定還是謝了,使用代碼塊的形式來呈現。
let poem = """
浩蕩離愁白日斜,
吟鞭東指即天涯。
落紅不是無情物,
化作春泥更護花。
"""
//取出字符串的第1個索引
poem.starIndex
//取出字符串最后一個索引
poem.endIndex
//通過下標訪問字符串的字符
poem[poem.startIndex]
//用字符串的index(after:)或index(before)引用后一個或前一個索引
poem[poem.index(before: poem.endIndex)]
//用字符串的index(_:offsetBy:)方法向前進位
poem[poem.index(poem.startIndex, offsetBy: 3)] //前進3位
poem[poem.index(poem.endIndex, offsetBy: -3)] //后退3位
對于字符串索引有一點需要注意:字符串的endIndex不是該字符串的最后一個字符!** 比如上述代碼poem,它的endIndex不是“。” “。”是endIndex的前一位。
數組的高階操作(閉包+函數式編程)
這次學了兩個高階操作:
- 高階操作①: 求和,連接元素, reduce
舉個例子:
//連接元素
let str1 = ["A","P","P","L","E"]
let title = str1.reduce("I love") {
$0 + "," + $1
}
//求和
let number1 = [1,3,5,7,9]
let total = number1.reduce(0) {
$0 + $1
}
上面的是閉包表達式,下一章會提到reduce后面()
中的是初始值,其實reduce就是一個循環,也可以用普通代碼寫出來,以第二個求和閉包為例:
let number = [1,3,5,7]
func reduce(array:[Int], initValue:Int) -> Int{
var total = initValue
for i in 0..<array.count {
total += array[i]
}
return total
}
reduce(array: number, initValue: 0)
- 高階操作②: 變形 map
舉個例子,把一個Int類型的數組轉化為String類型的數組:
let number = [1,2,3,4,5,6,7]
//“->”后面表示你要轉化的類型
let intToStr = number.map { (number) -> String in
return "\(number)"
}
該方法同樣可以使用函數實現(也是個循環)
func mapIntToStr(array:[Int]) -> [String]{
var answer = [String]()
var value = ""
for i in array {
value = String(i)
answer.append(value)
}
return answer
}
let numbers = [1,3,5,7]
let intToStr = mapIntToStr(array: numbers)
只不過用閉包表達式寫簡潔了許多!
Set類型的更多操作與方法
- ①元素數: count, 空否: isEmpty
let s: Set = [1,4,5,6]
//計數
s.count
//空否
s.isEmpty
- ②插入:insert, 移除:remove
//插入
s.insert(2)
//移除
s.remove(2)
- ③是否包含某元素:contains ??常用
s.contains(5)
交集 intersection
let s2: Set = [1,4,9,0]
s.intersection(s2)
補集 symmetricDifference
s.symmetricDifference(s2)
其實,Swift的語法十分靈活,上面這些點語法在字符串,數組等情況下都可以通用!