美文网首页
swift map学习

swift map学习

作者: ChoiKarl | 来源:发表于2017-01-05 01:15 被阅读13次
let array = [1, 2, 3, 4, 5]

现在有需求将array里的元素全部变成字符串

func convertString(_ array: [Int]) -> [String] {
  var result = [String]()
  for item in array {
    result.append(String(item))
  }
  return result
}

现在有需求将数组里的全部元素*2

func convertString(_ array: [Int]) -> [Int] {
  var result = [Int]()
  for item in array {
    result.append(item * 2)
  }
  return result
}

现在有需求将数组里的全部元素 + 10
....复制上面代码,改一点点.

可以通过系统map函数做到.

但是下面就自己写一个map函数当做学习
也是给Array做个扩展
从上面的各种需求来看,其实就是拿到数组里的每一个元素做处理
就从这开始着手:
定义一个泛型函数,函数需要返回什么类型,有调用者自己决定.

  • 函数有一个参数,是一个block类型,这个block里会将数组的元素当做参数带出去,拿* 到这个参数需要做什么处理有调用者自己决定(就像上面的需求一样,或是乘以2 或是变成字符串,或者干嘛,随意)
    • block还有一个返回值,返回值是泛型类型,就是你拿到数组元素处理完以后的类型.
  • 函数还有一个返回值,返回的是一个数组,就是处理完每一个元素以后得到的新值,数组类型也是有处理时的类型决定,也是一个泛型
extension Array {
  public typealias element = Array.SubSequence.Element
  func customMap<T>(_ transform: (element) -> T) -> [T] {
    var result = [T]()
    for item in self {
      result.append(transform(item))
    }
    return result
  }
}

使用:



[1,2,3,4,5].customMap({$0 * 2})
[1,2,3,4,5].customMap { (item) -> String in
  return String(item)
}

学习笔记.

相关文章

网友评论

      本文标题:swift map学习

      本文链接:https://www.haomeiwen.com/subject/jsiavttx.html