gpt4 book ai didi

swift - 将枚举数组类型转换为 [Any]

转载 作者:行者123 更新时间:2023-11-28 07:11:24 25 4
gpt4 key购买 nike

当我尝试将枚举数组传递给接受[Any] 的方法时,我收到一条警告,告诉我“'EnumType' 与'Any' 不同”。如果我将 EnumType[EnumType] 传递给参数类型为 Any 的方法,则不会出现警告。有人可以阐明这里发生了什么吗?

最佳答案

当你将一个类型作为参数传递给一个接受 Any 的函数时,编译器会默默地为你做一个转换——如果你有 f(a: Any) 然后你调用 f(x),这有点像编译器为你编写 f(x as Any)

但是创建一个数组有点复杂,涉及遍历整个数组,一个一个地转换内容,而编译器不会自动这样做。

幸运的是,手工操作很容易:

// some function that just takes an array of Any and prints them
func takeAnys(anys: [Any]) {
",".join(anys.map(toString))
}

let ints: [Int] = [1,2,3]

// won't compile
takeAnys(ints)

// this iterates over each entry and converts it to Any,
// returning a new array of them
takeAnys(ints.map { $0 as Any })

请注意,将 [EnumType] 传递给采用 Any 的函数与将数组传递给采用 [Any ]。前者之所以有效,是因为 Any 可以容纳任何东西,包括数组,因此您可以得到 [EnumType] as Any,这很好。但是你的函数需要一个 Anyarray,也就是说,一个内容转换为 Any 的数组,而不是一个本身已经被转​​换的数组转换为 Any

值得注意的是,此功能确实适用于类——如果您有一个子类数组,您可以将它传递给一个接受父类(super class)数组的函数。但这是特定于引用类型的,您无法使用枚举或结构(或它们的协议(protocol),Any 是什么)获得相同的行为。

关于swift - 将枚举数组类型转换为 [Any],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306130/

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