美文网首页
Swift 数据类型

Swift 数据类型

作者: 小强七号 | 来源:发表于2019-07-16 14:42 被阅读0次

    Swift数据类型

    在我们使用任何程序语言编程的时候,需要使用各种数据类型来存储不同的信息。变量的数据类型决定了如何将代表这些值的为储存到计算机内存中。在声明变量时也可以指定它的的数据类型。所有变量都具有数据类型,以决定能够储存哪种数据类型。

    Int

    一般来说,你不需要专门指定整数的长度。Swift提供了一个特殊的整数类型Int,长度与当前平台的原生长度相同:

    • 在32位平台上,Int和Int32长度相同
    • 在64位平台上,Int和Int64长度相同
      除非你需要特定长度的整数,一般来说使用Int足够了,Int表示的范围可达到-2147483648~2147483647,大多数已经足够了

    UInt

    Swfit也提供了一个特殊的无符号类型UInt,长度与当前平台的原生长度相同:

    • 在32位平台上,UInt与UInt32长度类型相同
    • 在64位平台上,UInt与UInt64长度类型相同

    注意:尽量不要使用UInt,除非真的需要储存一个好当前平台原生字长度的无符号整数。除了这种情况,最好用Int,即使你要存储的值已知是非负的。统一使用Int可以提高代码的可复用性,避免不同的类型数字之间的转换,并且匹配数字的类型推断。

    整数类型需要注意以下几点:

    • 在32位系统上,Int和Int32长度相同
    • 在64位系统上,Int和Int64长度相同
    • 在32位系统上,Uint和UInt32长度相同
    • 在64位系统上,UInt和UInt64长度相同
    • Int8、Int16、Int32、Int64分别表示8位、16位、32位、64位的有符号整数形式
    • UInt8、UInt16、UInt32、UInt64分别表示8位,16位,32位,64位的无符号整数形式

    浮点数:Float、Double

    浮点数是小数部分的数字,比如3.14159,0.1等
    浮点类型比整数类型表示的范围更大,可以储存比Int类型更大或者更小的数字。

    • Double表示64位浮点数。当你需要储存更大或者更高精度的浮点数时请使用此类型。
    • Float表示32位浮点数。精度要求不高的话可以使用此类型

    布尔值:Bool

    Swift 有一个基本的布尔(Boolean)类型,叫做bool。布尔值逻辑上的值,因为他们只能是真(true)或者假(false)两个结果。

    字符串:String

    字符串是字符的序列集合,例如:

    "Hello World!"
    

    字符:Character

    字符指的是单个字母,比如:

    "C"
    

    可选类型:Optional

    使用可选类型来处理值可能缺失的情况。可选类型表示有值或者没有值。

    数值范围

    下表显示了不同变量类型内存的储存空间,及变量类型的最大值最小值:

    类型 大小(字节) 区间值
    Int8 1字节 -128 ~127
    UInt8 1字节 0 ~ 255
    Int32 4字节 -2147483648 ~ 2147483647
    UInt32 4字节 0 ~ 4294967295
    Int64 8字节 -9223372036854775808 ~ 9223372036854775807
    UInt64 8字节 0 ~ 18446744073709551615
    Float 4字节 1.2E-38 ~ 3.4E+38 (~6 digits)
    Double 8字节 2.3E-308 ~ 1.7E+308 (~15 digits)

    类型别名

    类型别名对当前的类型定义了另一个名字,类型别名通过使用typealias关键字来定义。语法格式如下:

    typealias newname = type
    

    例如定义了 Int 的类型别名为Feet:

    typealias Feet = Int        
    let distance: Feet = 100     
    print("距离是: \(distance)")
    

    类型安全

    Swift是一门类型安全(type safe)的语言
    由于Swift是类型安全的,所以它在编译你的代码是进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误

    var varA = 100
    varA = "hello world"
    print(varA)
    

    以上程序会在Xcode中报错:

    Cannot assign value of type 'String' to type 'Int'
    

    类型推断

    当你要处理不同的类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显示指定类型。如果没有显示指定类型,Swift会使用类型判断(type inference)来选择合适的类型。例如,如果你给一个常量赋值为100并且没有显示的注明类型,Swift可以推断出常量类型是Int,因为你给她赋的初始值看起来像个一个整数:

    let meaningOfLife = 100 //meaningOfLife 会被推测为 Int 类型
    

    同理,如果你没有给浮点字面量标明类型,Swift会推断你想要的Double:

    let pi = 3.14159 // pi 被推断成为Double 类型
    

    当推断浮点数的类型时,Swift总是会选择Double而不是Float,如果表达式中同时出现了整数和浮点数,会被推断成为Double类型:

    let pi = 3 + 0.14159  // pi会被推测为 Double类型 
    

    方法

    Swift 方法是与某些特定类型相关联的函数。在 Objective-C 中,类是唯一能定义方法的类型。但在Swift中,你不仅能选中是否要定义一个类/结构体/枚举,还能灵活的在你创建的类型(类/结构体/枚举)上定义方法。

    实例方法

    在 Swift 语言中,实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供以下方法:

    • 可以访问和修改实例属性
    • 提供与实例目的相关的功能

    实例方法要写在他所属的类型的前后大括号({})之间
    实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。
    实例方法只能被它所属的类的某个特定实例调用
    实例方法不能脱离于现存的实例而被调用

    语法
    func funcname(paramters) -> returntype {
    Statement1
    Statement2
    ……
    Statement N
    return parameters
    }
    
    方法的局部参数名称和外部参数名称

    Swift 函数参数可以同时有一个局部名称 (在函数体内部使用) 和一个外部名称(在调用函数时使用Swift中的方法和OC中的方法及其类似。Swift中方法名称通常用一个介词指向方法的第一个参数,比如:with,for,by等等)
    Swift默认进给方法的第一个参数名称一个局部参数名称;默认同时给第二个和后续的参数名称为全局参数名称。
    以下实例中 'no1' 在swift中声明为局部参数名称。'no2' 用于全局的声明并通过外部程序访问。

    import Cocoa
    
    class division {
        var count: Int = 0
        func incrementBy(no1: Int, no2: Int) {
            count = no1 / no2
            print(count)
        }
    }
    
    let counter = division()
    counter.incrementBy(no1: 1800, no2: 3)
    counter.incrementBy(no1: 1600, no2: 5)
    counter.incrementBy(no1: 11000, no2: 3)
    

    输出

    600
    320
    3666
    
    是否提供外部名称设置

    我们强制在第一个参数添加外部名称把这个局部名称当做外部名称使用。
    相反,我们呢也可以使用下换线 _设置第二个及后续参数不提供一个外部名称。

    self属性

    类型的每一个实例都有一个隐含属性叫做self,self 完全等同于该实例本身。
    你可以在一个实例的实例方法中使用这个隐含的self属性来引用当前实例。

    在实例方法中修改值类型

    Swift 语言中结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。但是,如果你确定需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择编译 mutating 这个方法,然后方法就可以从方法内部改变它的属性;并且他做的任何改变在方法结束时还保留在原始结构体中。

    在可变方法中给self赋值

    可变方法赋予给隐形属性 self 一个全新实例。

    类型方法

    实例方法是被类型的某个实例调用的方法,你也可以定义类型本身调用的方法,这种方法就叫做类型方法。
    声明结构体和枚举的类型方法,在方法func关键字之前加上关键字 static。类可能会用关键字class 来允许class来允许子类重写父类的实现方法。

    相关文章

      网友评论

          本文标题:Swift 数据类型

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