Ios 将Swift.Int作为泛型转换为Swift.Int会意外失败
我有一个复杂的函数,它试图将任意传入参数强制转换为已知类型。我得到这个错误Ios 将Swift.Int作为泛型转换为Swift.Int会意外失败,ios,macos,swift,Ios,Macos,Swift,我有一个复杂的函数,它试图将任意传入参数强制转换为已知类型。我得到这个错误 Could not cast value of type 'Swift.Int' (0x100a73aa8) to 'Swift.Int' (0x1002b7fb8). 下面是该函数的大致轮廓: public func convert <A, T>(a:A, _ t:T.Type) -> T? { print(t) // Int print(T.self) // Int print(T.self
Could not cast value of type 'Swift.Int' (0x100a73aa8) to 'Swift.Int' (0x1002b7fb8).
下面是该函数的大致轮廓:
public func convert <A, T>(a:A, _ t:T.Type) -> T? {
print(t) // Int
print(T.self) // Int
print(T.self == Int.self) // False. But why?
...
// Well I got a little hacky since the rest of the checks failed...
if "\(T.self)" == "Int" {
let ret = Int(a as! NSNumber)
print(ret) // 6, reports as an Int
return ret as! T
}
public func convert(a:a,\t:t.Type)->t?{
print(t)//Int
打印(T.self)//Int
print(T.self==Int.self)//False。但是为什么呢?
...
//我有点生气,因为其他的检查都失败了。。。
如果“\(T.self)”=“Int”{
设ret=Int(一个as!NSNumber)
print(ret)//6,报告为Int
返回ret as!T
}
我正在传递一个NSNumber。当代码在同一个项目中时,它会工作
值得注意的是,类型是从应用程序代码传入的,这是在框架代码中。当我在本地运行它时,它不会出现问题。是否框架代码引用的是内存中与应用程序代码不同的类型
同样值得一提的是:这是一个有iOS和OSX目标的项目。我只在运行OSX目标时看到下面的错误
objc[24993]:Class_TtC6AppKit15REPLApplication在/Users/Damouse/Library/Developer/Xcode/DerivedData/fabaginstbackend-ajqzosbfxnphgjaabtlaawsjwj/Build/Products/Debug/Riffle.framework/Versions/A/Frameworks/libswitappkit.dylib和/Users/Damouse/Library/Developer/Xcode/DerivedData/fabaginstbackend-ajqzosbfxnpjaabjaabtlaawsjwj/Build/Pr中实现Products/Debug/FabaginsBackend。将使用其中一个。哪一个未定义。
找到了答案。这是一个OSX应用程序,带有包含Swift代码的Cocoapod。为了让应用程序编译,我必须将“包含嵌入式Swift代码”设置为“是”
这允许代码进行编译,但给了我“哪一个未定义”错误。我相信swift库被链接了两次,因此框架代码中引用的类型与应用程序代码中传入的类型不同。“解决方案”:
…这几乎不是管道胶带。它有效,但它让我内心的小猫感到悲伤
if "\(T.self)" == "Int" {
let ret = Int(a as! NSNumber)
return unsafeBitCast(ret, T.self)
}