swift4.2标准库更改

swift4.2发布了

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值