1、RangeReplaceableCollection 集合添加根据条件删除方法(官方原文)
protocol RangeReplaceableCollection {
/// Removes every element satisfying the given predicate from the collection.
mutating func removeAll(where: (Iterator.Element) throws -> Bool) rethrows
}
extension RangeReplaceableCollection {
mutating func removeAll(where: (Iterator.Element) throws -> Bool) rethrows {
// default implementation similar to self = self.filter
}
}
比如:
struct Person{
let name:String?
let age:Int
}
var arr = [Person(name: nil, age: 1),
Person(name: "b", age: 2),
Person(name: "c", age: 3),
Person(name: "d", age: 4)]
arr.removeAll {$0.age<2}
//[Person(name: Optional("b"), age: 2), Person(name: Optional("c"), age: 3), Person(name: Optional("d"), age: 4)]
跟以前的filter方法比较是在集合本身进行修改,而filter的方法闭是返回闭包为真的集合。
2、Bool变量添加切换方法(官方原文)
extension Bool {
/// Equivalent to `someBool = !someBool`
///
/// Useful when operating on long chains:
///
/// myVar.prop1.prop2.enabled.toggle()
mutating func toggle() {
self = !self
}
}
以后可以这样切换了 model.model2?.model3.enabled.toggle()
3、随机统一(官方原文)
以前随机数要用到arc4random()函数
现在
var myRandom = SystemRandomNumberGenerator()
let num = Int.random(in: 0..<10, using: &myRandom)
而且可以在一个集合中随机生成一个集合内的元素
let arr = [1,4,6,9,11,12]
arr.randomElement()
也可以在集合中做洗牌操作
var myRandom = SystemRandomNumberGenerator()
var arr = [1,4,6,9,11,12]
arr.shuffle(using: &myRandom)
4、添加last(where:)和lastIndex(where:)方法(官方原文)
在集合中添加从后面搜索索引和查找元素方法
let arr = ["aa","bbbb","ddddd","ccccc","kas"]
//从后面开始查找元素
arr.last{$0.count>4}//返回ccccc
//从后面开始查找索引
arr.lastIndex{$0.count>4}//返回3
5、Hashable增强(官方原文)
标准库新增Hasher结构体,Hasher在系统每次执行,会生成不同的哈希种子,这个种子是随机生成的,Hasher为Hashable的生成提供捕获哈希状态。
struct Person:Hashable{
let name:String
let age:Int
}
系统会有默认实现
var hashValue: Int{
var hash = Hasher()//系统在没重新启动的时候 这个方法生成的值相同,重启后这个值会变
self.hash(into: &hash)
return hash.finalize()
}
func hash(into hasher: inout Hasher){
hasher.combine(name)
hasher.combine(age)
}
6、Sequence新增allSatisfy算法(官方原文)
let arr = [1,2,3,5,6,7,8,9]
arr.allSatisfy{$0>0}//true
arr.allSatisfy{$0>1}//false