Swift是一門動態類型的強類型語言

之前我一直以為,Swift是一門弱類型的語言。

判斷依據:

Swift 變量不強制的指定類型,而是用 varlet 表示可變與不可變。所以,Swift是一門弱類型的語言。

但是,看了一下強弱類型的時候,才恍然大悟。其實 varlet 的特性,只是說明Swift是一門動態類型的語言。并不能指出是否是強或弱類型。

一些定義:

  • 靜態類型語言:是一種編譯器無法自動檢測類型的語言。
  • 動態類型語言:是一種編譯器能夠自動檢測類型的語言。
  • 強類型語言:強類型語言也稱為強類型定義語言。是一種總是強制類型定義的語言,要求變量的使用要嚴格符合定義,所有變量都必須先定義后使用。
  • 弱類型語言:弱類型語言也稱為弱類型定義語言。與強類型定義相反。像vb,php,js等就屬于弱類型語言。

光看定義不夠生動,還是來舉個例子:

Java是一種靜態類型語言,也是一種強類型語言。因為編譯器不能自動檢測類型,所以它是靜態的,而且類型受到嚴格限制,所以它也是一種強類型語言。

javascript是一種動態類型語言和非強類型語言。
因為編譯器能夠在運行時檢測類型,并且類型也不受嚴格限制。

所以,基于上面的例子,你可以說swift允許我們不聲明類型并且讓編譯器自己檢測類型,所以swift被Apple官方公布為動態類型語言。

let num = 1

這里沒有強制聲明類型,看似一個弱類型的語言,其實不然。Swift 編譯器能夠推斷出 numInt 類型。那么 num 就不能再被賦值為 String 類型。更不能寫成如下的形式:

let num = 1
let str = "2"
let result = num + str

編譯器將會報如下的錯誤:

error: binary operator '+' cannot be applied to operands of type 'Int' and 'String'
let result = num + str
             ~~~ ^ ~~~
note: overloads for '+' exist with these partially matching parameter lists: (Int, Int), (String, String), (Int, UnsafeMutablePointer<Pointee>), (Int, UnsafePointer<Pointee>)
let result = num + str
                 ^

這說明了,Swift 是一門強類型的語言。Swift 的類型聲明,你可以看成是在定義變量的時候,隱式聲明的(由編譯器推斷出),當然也可以顯式的聲明。如下:

let num: Int = 1

參考:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。