首页 > 解决方案 > 如何让 Swift 专门针对数组使用此功能?

问题描述

我有一个函数,符合KeyedDecodingContainerProtocol,大致是:

func decode<T : Decodable>(_ type: T.Type, forKey key: K) throws -> T {
  return type.init(from: decoder)
}

但是,如果T是一个Array,那么它的 init 方法会不必要地慢(是的,我已经进行了基准测试,它产生了很大的不同)。所以对于数组,我想运行类似的东西:

func decode<U : Decodable>(_ type: [U].Type, forKey key: K) throws -> [U] {
  var array: [U] = []
  for ... {
    array.append(U.ElementType.init(from: decoder))
  }
  return array
}

然而,就目前而言,只有第一个函数被调用,即使是数组也是如此。我也可以做类似的事情if let arrayType = type as? [Decodable] {...}或任何其他类型的分支,我可以运行特定的代码。如有必要,可以进行疯狂的黑客攻击。

是否有捷径可寻?对我来说,这将是一场巨大的表演胜利。

标签: swiftgenericsdecodable

解决方案


推荐阅读