gpt4 book ai didi

swift 2 自省(introspection)

转载 作者:行者123 更新时间:2023-11-28 09:37:15 27 4
gpt4 key购买 nike

我正在将一些“旧的”Swift 代码转换为 Swift 2.0,但我遇到了一个我无法摆脱的错误。
我的函数接收一个类型(任意)的数组,并返回一个相同类型的新数组。

此代码在 Swift 2.0 中不再有效:

func makePattern1<T>(var list: Array<T>) -> Array<T> {
let theType = list.dynamicType
var result = theType()
for i in 1..<list.count {
result.append(list[i])
result.append(list[i-1])
}
return result
}

给出错误消息:“从元类型值初始化必须显式引用‘init’”。

更正代码:var result = theType.init()给出“没有更多上下文的表达式类型不明确”错误。

我错过了什么?

最佳答案

只是为了好玩:另一种解决方案:

func makePattern2<T>(list: [T]) -> [T] {
return zip(list.dropFirst(), list).flatMap { [$0, $1] }
}

let m = makePattern2([1,2,3,4,5])
print(m) // [2, 1, 3, 2, 4, 3, 5, 4]

备注:

  • list.dropFirst() 是除了第一个数组元素之外的所有元素的序列。
  • zip(list.dropFirst(), list) 是一个序列(list[$0.i+1], list[$0.i]) 元组。
  • flatMap { [$0, $1] } 再次将这些元组组合成一个数组。

关于 swift 2 自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com