考虑以下:
struct SomeStruct {}
var foo: Any!
let bar: SomeStruct = SomeStruct()
foo = bar // Compiles as expected
var fooArray: [Any] = []
let barArray: [SomeStruct] = []
fooArray = barArray // Does not compile; Cannot assign value of type '[SomeStruct]' to type '[Any]'
Run Code Online (Sandbox Code Playgroud)
我一直试图找到这背后的逻辑,但没有运气.值得一提的是,如果将结构更改为类,则可以完美地运行.
总是可以添加一个变通方法并映射fooArray的每个对象并将它们转换为Any类型,但这不是问题.我正在寻找一个解释为什么这样做的样子.
有人可以解释一下吗?
我正在写一些Swift代码,其中我有一个包含泛型类型的数组:
let _data: Array<T> = T[]()
Run Code Online (Sandbox Code Playgroud)
稍后在我的代码中,我需要确定存储在数组中的类型.我尝试使用文档中描述的类型转换技术(尽管它没有用于泛型).
switch self._data {
case let doubleData as Array<Double>:
// Do something with doubleData
case let floatData as Array<Float>:
// Do something with floatData
default:
return nil // If the data type is unknown return nil
}
Run Code Online (Sandbox Code Playgroud)
上面的switch语句在编译时导致以下错误:
- 在/code.viperscience/Adder/src/Adder Library/Matrix.swift:45:3:0:错误:无法执行命令时发出IR SIL函数@ _TFC19Adder_Example ___ Mac6Matrix9transposeUS_7Element__fGS0_Q__FT_GSqGS0_Q___ for'transpose':分段错误:11:0:错误: swift前端命令因信号失败(使用-v查看调用)命令/Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift失败,退出代码为254
有人知道如何将我的通用数据转换为实际类型以采取特定的行动吗?