swift - 为什么在泛型类型已知时传入它

标签 swift generics swift4

这个问题源于阅读关于 NSKeyedUnarchiver 的文档(文档 here )及其下面的实例方法:

 func decodeDecodable<T>(_ type: T.Type, forKey key: String) -> T? where T : Decodable

当已经可以从 T 确定类型时,传入 _type: T.Type 的目的是什么?

最佳答案

Swift 只允许您在类型上显式指定泛型参数,而不是在方法或函数上。

struct Foo<T> {
    func bar<U>() -> U
}

let foo = Foo<Int>() // legal
foo.bar<Int>() // illegal

语言可以从返回值推断出T:

let foo = Foo<Int>() // legal
let bar: Int = foo.bar() // legal: T inferred to be Int

然而,这在使用多态性时并不总是正确的。

class Bar {}
class Baz: Bar {}

let decoded: Bar = decodeDecodable(forKey: "baz")
// would infer decodeDecodable<Bar>(forKey: "baz")
// which is not correct for a Baz object

关于swift - 为什么在泛型类型已知时传入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46574931/

相关文章:

iOS - AVSpeechSynthesizer 暂停和继续说话问题

java - 如果 <T> 不是输入参数,参数化方法如何解析?

C++ 类型转换重载

swift - Firebase Swift 获取成员所在房间的列表

ios - 创建数组时发生 fatal error

android - 数据绑定(bind)通用变量

ios - 如何使用字典数组 iOS swift 解析 JSON

Swift 4 上的条形码

ios - 确定标题何时停留在 UITableView 中

swift - 如何更新 NSView 图层位置和 anchor 以与鼠标事件的 NSView 框架同时进行转换