作为练习,我正在实现一个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})
但这仅适用于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
})
答案 0 :(得分:2)
import UIKit
类型import 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]
已编辑添加
或者,您可以编写更通用的地图
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