代码之家  ›  专栏  ›  技术社区  ›  user4790024

Swift 2中数组的扩展

  •  0
  • user4790024  · 技术社区  · 10 年前
    extension Array{
    
        func addBonus(addFunc:([Int])->([Int])) ->[Int]{
            return addFunc(self)//error in this line
    
        }
    }
    var empSalArray:[Int] = [2500,1300,1244,3412,5432,1223]
    var empBonusAddedArry = empSalArray.addBonus{ arr -> [Int] in
    
        var temp = [Int]()
        for val in arr{
            temp.append(val+1000)
        }
        return temp
    }
    print(empBonusAddedArry)
    

    想创建Array..的扩展,以便我可以按排序方式调用

    array.sort(){}
    

    然而,错误返回为

    无法将Array类型的值转换为预期的参数类型 [国际]。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Martin R    10 年前

    addFunc(self) 因为数组不需要是 Int 元素。

    在这种情况下,很容易修复:

    extension Array {
    
        func addBonus(addFunc:([Element])->([Element])) ->[Element]{
            return addFunc(self)
        }
    }
    

    哪里 Element 是数组的通用占位符类型。

    或者,您可以考虑定义扩展方法 像

    extension Array{
        func addBonus(addFunc:(Element)-> Element) ->[Element]{
            return self.map(addFunc)
        }
    }
    

    其中数组的变换函数 要素 而不是 传递整个数组:

    var empSalArray:[Int] = [2500,1300,1244,3412,5432,1223]
    var empBonusAddedArry = empSalArray.addBonus { amount in amount + 1000 }
    print(empBonusAddedArry)
    

    当然,使用内置的 map() 方法:

    var empSalArray:[Int] = [2500,1300,1244,3412,5432,1223]
    var empBonusAddedArry = empSalArray.map { amount in amount + 1000 }
    print(empBonusAddedArry)