是否有任何特定资源可以证明可以在 Swift 中推断出哪些值?
Is there any particular resource that demonstrates which values can be inferred in Swift?
例如:
let myConstant = 4
上面的常量的值可以推断出来
我们怎么知道一个值是否可以推断出来?
一般来说,如果知道expression
求值的类型,就可以推断出x
的类型:
let x = <expression>
在您的示例中,整数文字 4
被评估为 Int
,因此 myConstant
的类型被推断为 Int
。
另一个例子:
func f() -> String { return "Foo" }
let x = f()
可以推断x
的类型,因为我们通过查看其声明知道f
将return的类型,String
.
对于更复杂的表达式,这仍然适用。编译器将查看每个子表达式求值的类型,并进行分析以确定表达式最终求值的类型。
但是,有时无法做到这一点:
func f<T>() -> T? { return nil }
let x = f()
f
可以 return 任何类型,但您没有指定任何类型。 T
未知,因此 f
的 return 类型未知,因此无法推断 x
的类型。
例如:
let myConstant = 4
上面的常量的值可以推断出来
我们怎么知道一个值是否可以推断出来?
一般来说,如果知道expression
求值的类型,就可以推断出x
的类型:
let x = <expression>
在您的示例中,整数文字 4
被评估为 Int
,因此 myConstant
的类型被推断为 Int
。
另一个例子:
func f() -> String { return "Foo" }
let x = f()
可以推断x
的类型,因为我们通过查看其声明知道f
将return的类型,String
.
对于更复杂的表达式,这仍然适用。编译器将查看每个子表达式求值的类型,并进行分析以确定表达式最终求值的类型。
但是,有时无法做到这一点:
func f<T>() -> T? { return nil }
let x = f()
f
可以 return 任何类型,但您没有指定任何类型。 T
未知,因此 f
的 return 类型未知,因此无法推断 x
的类型。