这个问题源于阅读围绕NSKeyedUnarchiver
(文档here)的文档及其实例方法:
func decodeDecodable<T>(_ type: T.Type, forKey key: String) -> T? where T : Decodable
如果已经可以从_ type: T.Type
确定类型,则传递T
的目的是什么?
答案 0 :(得分:3)
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