gpt4 book ai didi

Swift 泛型类型选择不会传播

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:26 25 4
gpt4 key购买 nike

如果我理解正确的话,Swift 可以通过不同的方式确定泛型的实际类型,包括通过返回类型进行匹配。相同(或类似)的机制用于消除重载函数的歧义。所以这按预期工作:

func getValue<T>()->T? {
return nil
}

func getValue()->Int? {
return 13
}

let b: Int? = getValue()

运行时,b 将为 13。从技术上讲,这两个函数签名都很合适,但后者更特定于所请求的返回类型。

让我们添加第二个函数并通过它进行调用:

func getGetValue<T>()->T? {
return getValue()
}

let c: Int? = getGetValue()

运行时,c 将为 nil。事实上,编译器会选择从 getGetValue() 调用的通用 getValue() 实现,这不是我想要的。恕我直言,在 getValue() 的两个实现之间进行选择时,请求的返回类型应通过第二个泛型传播,从而导致与第一个示例中相同的行为。

我错过了什么? (Xcode 7.1)

最佳答案

你只是忘了施法。

func getValue<T>()->T? {
return nil
}

func getValue()->Int? {
return 13
}

let b: Int? = getValue() // 13

func getGetValue<T>()->T? {
return getValue() as? T
}

let c: Int? = getGetValue() // 13

关于Swift 泛型类型选择不会传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33653764/

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