Swift复习系列:基础部分

作者: ZYiDa | 来源:发表于2017-09-01 11:04 被阅读102次

前言说明

1.Swift是一种类型安全语言,你可以清楚的知道值的类型,当你想传入一个Int类型的数据,类型安全会阻止你不小心传入String或者其它类型
2.Swift包含C和Objective-C上所有的基础数据类型,同时还提供ArraySetDictionary三个集合数据类型。
3.Swift新增高阶数据类型,比如元组Tuple,用于创建或者传递一组数据,比如它可以作为函数返回值来返回多个值;Swift增加可选类型(Optional)类型,用于处理值缺失的情况,它类似于nil,但它可以用于任何类型,同时比nil指针更加安全。

一、常量和变量

1.声明变量和常量
    let constantValue = 233
    var variableValue = 0

    var xx = 1, oo = 2
    let pyl = 233, uzi = 100

1.用let来声明常量,且声明之后,值不可改变
2.用var来声明变量,一定要设置初始化值,否则会报Type annotation missing in patternClass 'ViewController' has no initializers错误。变量声明之后,值可以改变。
3.我们可以使用varlet来同时声明多个变量或常量,中间要用逗号隔开;

2.类型标注,给常量或变量显式地指定数据类型

Swift可以根据你声明的变量或常量来隐式地推断数据类型,当然,你也可以显示地给数据进行类型标注,指定数据类型,如下:

var myFirstValue:String = "This is my first string value."
let mySecondVlue:Int = 101

我们可以在变量或常量名称后面加载:TypeName来给数据显式指定数据类型,比如,给myFirstValue指定数据类型为String类型

3.常量和变量的命名

你可以使用你喜欢的任何字符(包括Unicode字符)来作为变量名,不过不能以数字开头也不能使用数学符号保留的或者非法的Unicode字符码位连线/制表符
注意↓↓↓

一旦为常量或变量指定确定的类型,就不能使用相同的名字再次进行声明,不能改变其存储值的类型,同时也不能将常量与变量进行相互转换。

4.常量和变量的输出

你可以使用NSLog(format: String, args: CVarArg...),这样和Objective-C上面的类似。接下来说的是print( )输出语句。
我们可以直接使用print(items: Any..., separator: String, terminator: String)print(items: Any...)来输出一个或者多个变量或者常量的值,如

print(constantValue) //输出的结果是常量constantValue的值
print(constantValue,variableValue)//输出的结果是常量constantValue的值

print(items: Any..., separator: String, terminator: String)中,当输出多个变量/常量时,我们可以给separator设置值来在每两个变量/常量之间添加一些信息,同时也可以给terminator设置值来在输出末尾显示一些其它信息,当然你也可以传递空字符" "给它们,如下,

 print(constantValue, variableValue,separator: "\n", terminator: "\nOther messages.")

输出结果为:

233
0
Other messages.

也可以通过print("string\(常量或变量名称)")的方式来输出,如

print("I have\(constantValue)apples") //输出结果:I have 233 apple

二、Swift标记和注释
常用标记:

    // TODO:这是一个标记说明
    // MARK: 这也是一个标记说明
    // FIXME:这是一句提醒说明

效果如下,


屏幕快照

常用注释:

    //这是一句单行注释
    /*这是多行注释*/

    /*
     *这样可以写很多注释
     */

三、Swift数据类型和数据范围

1.整数类型

Swift中整数类型可以是有符号(Int)的(正数负数)或者无符号(UInt)的(正数)
我们可以通过.min.max来获取整数数据表示范围的最小值和最大值

let minValue = Int64.min
let maxValue = Int64.max
print(minValue,maxValue, separator: "\n", terminator: "\nInt64的数据类型范围")

输出结果

-9223372036854775808
9223372036854775807
Int64的数据类型范围

也就是说Int64的数据类型范围为-9223372036854775808 ~ 9223372036854775807

Swift中,Int为特殊的整数类型,长度与当前平台的原生字长度相同。

32位平台上,IntInt32长度相同.
64位平台上,IntInt64的长度相同.

UIntInt一样,只是UInt是无符号的。

2.浮点类型

浮点数据的表示范围比整型数据的范围更大,它可以表示比整型数据更大或者更小的数据。在Swift中提供了FloatDouble两种浮点数据类型。
其中,Float表示32位浮点数据Double表示64位浮点数据,在数据处理中,如果两个类型都匹配,优先选择Double

四、类型推断、类型安全以及类型检查
Swift是类型安全(type safe)的语言,它可以清楚的让你知道所处理数据值的类型,当你需要传入一个Int类型的数据时,在编译的时候,Swift类型安全(type safe)会进行类型检查(type checks),把不符合的类型标记为错误,所以你绝对不会错误的传进去一个String类型的数据。
当你在声明一个变量或者常量式,只给他们一个字面量(Literals)而没有显式指定数据类型时,类型推断(type inference)会根据情况来指定合适的数据类型,如下

let xxoo = 12 //xxoo会被指定为Int类型
let py = 12 + 3.1412926//py会被指定为Double

注意,当推断浮点数据时,总是优先选择Double,而不是Float.

五、数值型字面量
整数字面量可以被写作:

1.十进制数据,没有前缀;
2.二进制数据,前缀0b
3.八进制数据,前缀0o
4.十六进制数据,前缀0x

浮点字面量可以是十进制或者是十六进制,小数点两边必须至少有一个十进制(或十六进制)数字。

十进制浮点数也可以有一个可选的指数(exponent),用大小或小写的e来表示。
如果一个十进制浮点数的指数为exponent,则该浮点数可以表示为基数*10^exponent,如下

1.25e2 = 1.25*10^2
1.25e-2 = 1.25*10^-2

十六进制浮点数必须有一个指数,用大写或小写的p来表示。
如果一个十六进制浮点数的指数为exponent,则该十六进制浮点数可以表示为基数*2^exponent,如下

0xFp3 = 15 * 2^3
0xFp-3 = 15 * 2^-3

下面插入一下16进制小数转化为10进制小数的步骤,如0xC.35p0 ↓↓↓↓↓↓

在十进制中,小数点后第一位为十分位,第二位为百分位,以此类推......
在十六进制中,小数点后第一位为16分位,第二位为256分位,以此类推......
所以十六进制的小数0xC.35p0转化为十进制小数位(12 + 3/16 + 5/256)*2^0,结果为12.2070312*2^0 = 12.2070312

数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,不会影
响字面量:

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

五、类型别名
我们可以通过类型别名(type aliases)来给现有类型起一个别名。

    typealias Hahahahaha = Int64
    var haha = Hahahahaha.min
    var ahah = Hahahahaha.max

我们通过关键字typealiasInt64类型起一个别名为HahahahahaHahahahaha具有Int64类型所有的功能。

六、元组
元组(tuple)是一个许多不同类型数据值的集合(这是个人理解),它不像数组Array一样要求里面的元素必须是同一类型。如下,

var httpReturnCode = (200,"Success",[1,12,44])

我们定义了一个元组类型的数据,名称为httpReturnCode,值为(200,"Success",[1,12,44])

我们可以通过内容分解来获取和使用元组中的数据,如下

let httpReturnCodeTuple = (200,"Success")
let (code,message) = httpReturnCodeTuple
print("Login return code is \(code),message:\(message)")

当我们只想使用元组中的一部分数据时,可以通过下面的方式,即用( _ )来代替其它不略和不需要的部分。

let (loginCode,_) = httpReturnCodeTuple
print("Login code is\(loginCode).")

我们还可以通过下面的方式,来声明、获取和使用一个元组,即在声明的时候给每个元素单独命名,然后通过下标来访问

let httpReturnCodeTuple = (httpCode:200,httpMessage:"Success")
print("Login return code is \(httpReturnCodeTuple.httpCode),message:\(httpReturnCodeTuple.httpMessage)")

关于元组的比较
Bool类型的值不能比较,所以当元组中有Bool值时,不能用于两个元组的比较。元组比较会按照从左到右、逐值比较的方式,知道发现有两个值不等时停止。如果所有值相等,那么这两个元组就是相等的。请看下面的例子,

        let tuple01 = (1,"swift")
        let tuple02 = (3,"ObjC")
        let tuple03 = (3,"swift")

        if tuple01 >= tuple02
        {
            print("True")
        }
        else
        {
            print("False")
        }

        if tuple02 < tuple03
        {
            print("True")
        }
        else
        {
            print("False")
        }

输出的结果是:FalseTrue
因为tuple01tuple02比较时,1 < 3,此时停止比较,tuple01 < tuple02.但是,当tuple02tuple03比较时,3 = 3,接下来就开始比较ObjCswift两个字符串的大小,ObjC < swift,所以tuple02 < tuple03.

接下来穿插一下Swift中两个字符串大小的比较规则,
Swift中字符串的大小比较是逐位比较Unicode编码大小

1、如果第一位不同,则哪个第一位的值大就是哪个大
2、如果第一位相同,则比较第二位,规则一样
3、以此类推

七、可选类型
可选类型(optionals)用于处理值可能缺失的情况,它包含的意思如下,

有值,等于未知数x

没有值

注意

CObjective-C中并没有可选类型这个概念。最接近的是 Objective-C中的一个特性,一个方法要不返回一 个对象要不返回nilnil表示“缺少一个合法的对象”。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C方法一般会返回一个特殊值(比如 NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift的可选类型可以让 你暗示任意类型的值缺失,并不需要一个特殊值。

Swift中,我们可以通过Int的一种构造器将String类型转化为Int类型,比如我们可以将String类型的“110”转化为Int类型的“110”,如下,

        let gouString:String = "110"
        let gouInt = Int(gouString)
        print(type(of: gouInt))

控制台输出为:Optional<Int> 也就是说gouInt常量会被推断为Optional Int类型,而不是Int类型。因为gouString通过构造器转化为Int值时,可能成功,有值;也可能失败,没有值。

可选类型(optionals)nil

Swift中,nil可以给可选变量(划重点,注意,是可选)赋值,表示它没有值。当声明一个可选的变量或常量而没有赋值时,它们会被自动设置为nil,如下,

        //xxx会被赋值为nil
        var xxx:String?
        print(xxx)

但是,有一点需要注意,SwiftnilObjective-C 中的 nil 并不一样。在Objective-C 中, nil 是一个指向不存在对象的指 针。在 Swift 中, nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设 置为 nil,不只是对象类型。

相关文章

  • Swift复习系列:基础部分

    前言说明 1.Swift是一种类型安全语言,你可以清楚的知道值的类型,当你想传入一个Int类型的数据,类型安全会阻...

  • Swift基础部分(复习)

    一、常量和变量 Swift中用 let 来声明常量,用 var 来声明变量。 二、类型标注 当你声明常量或者变量的...

  • Swift 语言基础

    Swift 语言基础 Swift语言介绍 Swift基础部分 第一个Swift程序 Swift没有main函数,第...

  • Swift5复习(一)Swift编译流程、基础语法、流程控制、函

    Swift5复习(一)Swift编译流程、基础语法、流程控制、函数、枚举Swift5复习(二)可选项、结构体、类、...

  • Swift5复习(四)继承、初始化、可选链

    Swift5复习(一)Swift编译流程、基础语法、流程控制、函数、枚举Swift5复习(二)可选项、结构体、类、...

  • Swift5复习(三)属性、方法、下标

    Swift5复习(一)Swift编译流程、基础语法、流程控制、函数、枚举Swift5复习(二)可选项、结构体、类、...

  • Swift 区间运算符

    目前有时间,打算复习一下Swift,打算抽时间写个Swift基础教程系列。今天就说一下区间运算符。 闭区间运算符 ...

  • Swift: 基础部分

    Swift中文文档 一、常量和变量 常量: 不可变的量, 使用 let 修饰 变量: 可以修改值的量, 使用 va...

  • Swift 基础部分

    常量和变量 Swift语言是一种强类型的语言(和C、Java等一样),常量和变量在使用前都必须先声明。用let关键...

  • swift——基础部分

    常量和变量 常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeM...

网友评论

    本文标题:Swift复习系列:基础部分

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