gpt4 book ai didi

swift - 为什么函数会改变类型?

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

在调查过程中,我发现了 Swift 的奇怪行为,但也许我不明白某些事情。

我做了一个小对象来测试:

class BugTest:NSObject {
func test<Type>(content:[Type]) {

func inside<Head, Tail>(object:Head, type:Tail.Type) {
print ("Head: \(Head.self), Tail: \(Tail.self)")
}

if let first = content.first {
print("first element type: \(type(of: first)) Type.self: \(Type.self)")
inside(object:first, type:type(of:first))
}
}
}

结果很奇怪;一旦识别出 <Type>作为联合,这个案例 list 很好:

first element type: Joint Type.self: Joint
Head: Joint, Tail: Joint

但有时不是:

first element type: Point Type.self: NSManagedObject
Head: NSManagedObject, Tail: NSManagedObject

如果我打印 type(of: first) 点,则打印点,但如果我将类型作为 type(of: first) 传递,它会更改为 NSManagedObjectfunc inside里面.

知道如何传递类型而不丢失它吗?

调用 BugTest.test(content:[T]) 的代码看起来像这样:

//Defned in model
// Not real one

class Foo:NSMnagedObject {
var braus:[Bar]
}
class Bar:Foo {
var cirrus:[Car]
var stratus:[Whatever]
}
class Car:Bar {
var dudu:[Whatever]
}

//...etc...

func goDeeper<T>(content: [T]) {

let pathToNext = GethNicePath() \\ was OK
if let firstObject = content.first {

let bugtest = BugTest()
bugtest(content)

let nextSet = firstObject[KetPath: pathToNext]
goDeeper(nextSet)

}
}

第一次迭代没问题,但接下来的都是 type(of: first)返回 NSManagedObject。

最佳答案

是——“type(of:) 返回它在二进制元数据中找到的第一个类型表示,而当编译器试图推断预期返回的类型时,泛型函数将默认为它找到的最低类型”

关于swift - 为什么函数会改变类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532250/

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