gpt4 book ai didi

ios - 从 Swift.Int 作为泛型转换为 Swift.Int 令人惊讶地失败

转载 作者:行者123 更新时间:2023-11-30 14:00:56 26 4
gpt4 key购买 nike

我有一个复杂的函数,尝试将任意传入参数转换为已知类型。我收到这个错误。

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
}

我正在传递一个 NSNumber。当代码位于同一个项目中时它可以工作。

值得注意的是,类型是从应用程序代码传入的,并且是在框架代码中。当我在本地运行它时,它工作没有问题。框架代码是否引用了与应用程序代码不同的内存类型?

还值得一提的是:这是一个以 iOS 和 OSX 为目标的项目。我仅在运行 OSX 目标时看到以下错误。


objc[24993]:类 _TtC6AppKit15REPLApplication 在/Users/Damouse/Library/Developer/Xcode/DerivedData/FabAgainstBackend-ajqzosbfxnphgjaabtlaawsjsywj/Build/Products/Debug/Riffle.framework/Versions/A/Frameworks/libswiftAppKit.dylib 和/Users 中实现/Damouse/Library/Developer/Xcode/DerivedData/FabAgainstBackend-ajqzosbfxnphgjaabtlaawsjsywj/Build/Products/Debug/FabAgainstBackend。将使用两者之一。哪一个是未定义的。

最佳答案

想通了。这是一个带有 Cocoapod 的 OSX 应用程序,其中包含 Swift 代码。为了让应用程序编译,我必须将“包含嵌入的 swift 代码”设置为"is"。

这可以让代码编译,但给我“哪个是未定义的”。错误。我相信 swift 库被链接两次,因此框架代码中引用的类型与从应用程序代码传入的类型不同。 “解决方案”:

if "\(T.self)" == "Int" {
let ret = Int(a as! NSNumber)
return unsafeBitCast(ret, T.self)
}

...这几乎只是管道胶带。它确实有效,但它让我内心的小猫感到悲伤。

关于ios - 从 Swift.Int 作为泛型转换为 Swift.Int 令人惊讶地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005991/

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