小编Ble*_*pes的帖子

Set()的Swift map(_ :)扩展名?

  let numberSet = Set(1...11)
  let divideSet = numberSet.map({  $0 / 10 }) 
  //Error: Set does not have a member named map   :(
Run Code Online (Sandbox Code Playgroud)

Swift 1.2支持Set()无序集合,但map(_:)似乎不适用于集合,所以我决定在我的操场上变聪明并尝试:

 let stringSet = Set(map(numberSet, { String($0)}))
 println(stringSet)
 stringSet =  ["2", "11", "1", "8", "6", "4", "3", "9", "7", "10", "5]
Run Code Online (Sandbox Code Playgroud)

这似乎有效.所以我尝试扩展Set:

    extension Set {
        func map<U>(transform: (T) -> U) -> Set<U> {
        return Set(Swift.map(self, transform))  }
    }
   Error: "couldn't find initialiser for Set(T) that accepts argument of type U"
Run Code Online (Sandbox Code Playgroud)

我认为它有一个很好的理由,它不起作用,就像这个例子:

   let smarDividSet …
Run Code Online (Sandbox Code Playgroud)

swift swift-extensions

13
推荐指数
2
解决办法
5270
查看次数

简单的Swift数组扩展

尝试扩展Array类型以使用二进制排序按顺序插入元素.这是我的游乐场代码:

  extension Array  {

      func insertionIndexOf(elem: T , isOrderedBefore: (T, T) -> Bool) -> Int {
       var lo = 0
       var hi = self.count - 1
       while lo <= hi {
        let mid = (lo + hi)/2
        if isOrderedBefore(self[mid], elem) {
            lo = mid + 1
        } else if isOrderedBefore(elem, self[mid]) {
            hi = mid - 1
        } else {
            return mid
        }
    }
        return 0 
 }


  mutating func insertOrdered(elem: T){
     let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) …
Run Code Online (Sandbox Code Playgroud)

arrays swift swift-playground

5
推荐指数
2
解决办法
567
查看次数