如何在Swift中编写适用于所有类型的映射?

如何在Swift中编写适用于所有类型的映射?,swift,swift2,Swift,Swift2,作为练习,我正在实现一个map函数,它接受一个数组和一个函数,并将该函数应用于数组的所有元素,但我不知道如何声明它,以便它适用于任何类型的数组。 我可以做类似的事情 func intMap(var arr: [Int], fun: (Int) -> Int) -> [Int] { for i in 0 ..< arr.count { arr[i] = fun(arr[i]) } return arr } intMap([1,2,3],

作为练习,我正在实现一个map函数,它接受一个数组和一个函数,并将该函数应用于数组的所有元素,但我不知道如何声明它,以便它适用于任何类型的数组。 我可以做类似的事情

func intMap(var arr: [Int], fun: (Int) -> Int) -> [Int] {
    for i in 0 ..< arr.count {
        arr[i] = fun(arr[i])
    }
    return arr
}

intMap([1,2,3], {x in return x * x})
func intMap(var arr:[Int],fun:(Int)->Int)->[Int]{
对于0中的i..
但这只适用于int

Swift内置地图的类型签名是什么

编辑:

因此,我忽略了一个事实,即我可以在不显式声明其类型的情况下声明param类型签名

func myMap<T>(var arr: [T], fun: (T) -> T) -> [T] {
    for i in 0 ..< arr.count {
        arr[i] = fun(arr[i])
    }
    return arr
}

myMap([1,2,3], fun: {
    x in return x * x
})
func-myMap(var-arr:[T],fun:(T)->T)->[T]{
对于0中的i..
  • 创建一个新的游乐场
  • 就在它有
    import-UIKit
    type
    import-Swift
  • 命令单击单词Swift
这将打开Swift库,您可以在那里看到所有类型定义

你可以看到:

extension CollectionType {
/// Return an `Array` containing the results of mapping `transform`
/// over `self`.
///
/// - Complexity: O(N).
@warn_unused_result
@rethrows public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]

太好了。所以U可以是T型,也可以是完全不同的类型。
func myMap<T, U>(var arr: [T], fun: T -> U) -> [U] {
    var a: [U] = []
    for i in 0 ..< arr.count {
        a.append(fun(arr[i]))
    }

    return a
}
let a = [1, 2, 3]
let b = myMap(a, fun: { x in Double(x) * 2.1 })
a
b