美文网首页swift
Swift是一门动态类型的强类型语言

Swift是一门动态类型的强类型语言

作者: TomatosX | 来源:发表于2018-01-15 00:33 被阅读1301次

    之前我一直以为,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
    

    参考:

    相关文章

      网友评论

        本文标题:Swift是一门动态类型的强类型语言

        本文链接:https://www.haomeiwen.com/subject/pltroxtx.html