对于我来说,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的语法十分灵活,上面这些点语法在字符串,数组等情况下都可以通用!
网友评论