为什么我需要在Swift中指定变量在类中的类型?

Arb*_*tur 2 ios swift

我是在想.据我了解,var并且let可以是任何东西,并Swift自动进行正确的类型像JavaScript.但是当我尝试在类中设置属性时,当我没有指定类型时,我会收到错误.

var value1, value2 // Error: missing annotations
Run Code Online (Sandbox Code Playgroud)

好吧,我已经阅读了一些引用,变量需要声明类型var foo = 0.但在我的课堂上,我有一个init()将变量设置为我在创建类对象时输入的内容.

那我该怎么做呢?它甚至可能吗?

我看到了这种类型,typealias但也没用.

Pau*_*w11 10

虽然Swift和Javascript都允许您在不定义类型的情况下为变量分配常量,但这两种语言存在根本区别.Swift是一种强类型,类型安全的语言,而Javascript则不是.来自Swift编程语言 -

"Swift是一种类型安全的语言.类型安全语言鼓励您清楚代码可以使用的值的类型.如果你的部分代码需要一个String,你就不能错误地将它传递给Int."

摘录自:Apple Inc."The Swift Programming Language."iBooks. https://itunes.apple.com/au/book/swift-programming-language/id881256329?mt=11

所以当你说

var welcomeMessage = "Hello" 
Run Code Online (Sandbox Code Playgroud)

Swift推断您希望welcomeMessage成为字符串并相应地设置其类型.随后尝试

welcomeMessage=3
Run Code Online (Sandbox Code Playgroud)

将指定运行编译时错误,因为您指定的类型不正确.

如果您没有分配初始值,那么Swift无法推断出类型,您必须指定它.

另一方面,Javascript非常乐意接受

var welcomeMessage="Hello"
welcomeMessage=3
Run Code Online (Sandbox Code Playgroud)

因为它不是类型安全的,只是尝试用它拥有的值尽力而为.例如,如果在为welcomeMessage分配3之后对welcomeMessage执行字符串操作,则Javascript会将该值转换为"3",然后执行该操作.

虽然Javascript有类型安全扩展,但它不像Swift那样是语言的基本组成部分


Ben*_*n-G 7

仅在最初指定默认值时才会推断类型.从语言参考中的示例,声明类型:

var welcomeMessage: String
Run Code Online (Sandbox Code Playgroud)

或者指定一个允许Swift推断类型的初始值:

welcomeMessage = "Hello"
Run Code Online (Sandbox Code Playgroud)

在上面的welcomeMessage示例中,没有提供初始值,因此welcomeMessage变量的类型使用类型注释指定,​​而不是从初始值推断.