Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将Swift.Int作为泛型转换为Swift.Int会意外失败_Ios_Macos_Swift - Fatal编程技术网

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)
}