首页 > 代码库 > 寒城攻略:Listo 教你 25 天学会 Swift 语言 - 03 The Basic

寒城攻略:Listo 教你 25 天学会 Swift 语言 - 03 The Basic

import Foundation


//***********************************************************************************************

//1.The Basics(基础)

//_______________________________________________________________________________________________

//介绍

//Swift 的类型是 C Objective-C 的基础上提出的,Int是整形;Double Float是浮点型,Bool 是布尔型,String 字符串。Swift 中还有两个集合类型,Array类型和 Dictionary类型。


//_______________________________________________________________________________________________

//Swift 中除了常用数据类型,还增加了元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以使用一个元组返回多个值。


//_______________________________________________________________________________________________

//Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示某一个值是具体的数据或者为 nil


//***********************************************************************************************

//2.Constants and Variables(常量和变量)

//_______________________________________________________________________________________________

//简单常量和变量的命名

let maximunNumberOfLoginAttempts =10      //使用 let命名常量,常量不可以再改变

var currentLoginAttempt =0                //使用 var命名变量,变量可以再后面进行修改

currentLoginAttempt = 8

println("The constant number is\(maximunNumberOfLoginAttempts) and the variable number is\(currentLoginAttempt)")


//_______________________________________________________________________________________________

//数据类型说明

var welcomeMessage:String  ="Hello, Listo"       //直接声明 welcomeMessage String 类型

println("the welcomeMessage is\(welcomeMessage)")


//_______________________________________________________________________________________________

//变量名和常量名的类型

let π = 3.1415926      //swift支持变量名很广泛,你可以使用任何字符常量和变量名,包括 Unicode字符

let你好 ="你好世界"

(因为 CSDN 博客不能识别此字符类型,但是 Swift 支持这样的类型,所以只能用图片代替了 


//***********************************************************************************************

//3.Comments(注释)

//_______________________________________________________________________________________________

//这是一条注释            //使用 "//"来写注释

/*

    /*

    */                  //Swift 中注释的特性是可嵌套性,这在 C Objective-C中是没有的

*/


//***********************************************************************************************

//4.Semicolons(分号)

//_______________________________________________________________________________________________


//***********************************************************************************************

//5.Integers(整型数据)

//_______________________________________________________________________________________________

//整型数据介绍

//迅速提供签名和无符号整数8163264位形式。这些整数遵循命名约定类似于C,在一个8位无符号整数类型UInt8,Int32,32位带符号整数类型。像所有类型迅速,这些整数类型的名称


//_______________________________________________________________________________________________

//整型数据使用

let minValue = http://www.mamicode.com/UInt8.min        //minValue  0,是 UInt8类型的最小值

let maxValue = http://www.mamicode.com/UInt8.max        //maxValue  255,是 UInt8类型的最大值

println("the max of UInt8 is\(maxValue) and the min of UInt8 is\(minValue)")


//***********************************************************************************************

//6.Floating-Point Numbers(浮点数)

//_______________________________________________________________________________________________

//介绍

//浮点数就是有小数点的数字,例如 3.1415926 0.1

//Double 保存 64 位的浮点数(至少 15 位数字),Float 保存 32 位浮点数(至少 7 位数字)


//_______________________________________________________________________________________________

//浮点数的命名和使用

let meaningOfLift =42     //meaningOfList 会被默认认为是 Int类型

let  Pi = 3.1415       //Pi会被认为是默认的 Double 类型

let anotherPi = 3 + 4.25       //anotherPi会被默认认为是 Double类型

println(anotherPi)


//***********************************************************************************************

//7.Numeric Type Conversion(类型转换)

//_______________________________________________________________________________________________

//当不同类型数据进行运算的时候,Swift不支持隐式的转化,所以需要我们显式的转化才能进行运算

let age =19

let name ="Listo"

let infomation =name +String(age)

println(infomation)


//***********************************************************************************************

//8.Type Aliases(数据类型重命名)

//_______________________________________________________________________________________________

//重新命名数据类型

typealias AudioSample =UInt16     // UInt16类型重新命名为 AudioSample

var maxAmplitudeFound =AudioSample.min

println(maxAmplitudeFound)


//***********************************************************************************************

//9.BooleansBool 类型数据)

//_______________________________________________________________________________________________

//布尔类型数据的命名

let orangesAreOrange =true

let turnipsAreDelicious =false

if turnipsAreDelicious{            //if后面跟上 Bool 类型数据

    println("Mmm, tasty turnips!")

}

else{

    println("Eww, turnips are horrible")

}


//***********************************************************************************************

//10.Tuples(元组)

//_______________________________________________________________________________________________

//元组(tuples把多个值合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型

let http404Error: (Int,String) = (404,"Not Found")      //http404Error 的类型是 Int, String),值是404, "Not Found")

println("the number of message is\(http404Error.0) and the information of message is\(http404Error.1)")      //通过下标访问元组中的元素


//_______________________________________________________________________________________________

//通过参数名访问数组中的元素

let information = (Name:"Listo", Age:21)

println(" The information of man‘s name is\(information.Name) and the age of man is\(information.Age)")      //通过参数名访问元组中的元素

//_______________________________________________________________________________________________

//使用 "_"

let (justTheStatusCode,_) =information    //想要不包含元组中的某一个参数的时候就用  _省略即可

println("the name of man is\(justTheStatusCode)")


//***********************************************************************************************

//11.Optionals(可选类型数据)

//_______________________________________________________________________________________________

//代码演示可选类型

let possibleNumber ="123"

let convertedNumber:Int? =possibleNumber.toInt()      //此时我们不知道 possibleNumber字符串是否可以转换为 Int 类型,所以我们必须在 Int后面添加 "?"来表示它为可选类型数据


var responseCode:Int? =404       //要么存在,值为 404

responseCode =nil                 //要么不存在,赋值为 nil


//_______________________________________________________________________________________________

//使用 可选类型

//var strValue = http://www.mamicode.com/nil //1.Swift nil 不能用于非可选类型,也就是说如果代码中的常量和变量不存在,那么必须将它声明为可选类型。2.如果定义的可选类型不提供默认值,该对象自动设为 nil

var strValue:String?

println(strValue)


let hashValue =http://www.mamicode.com/strValue?.hashValue     //当可选类型数据使用方法时,必须在变量名后面加上 "?"判断数据是否为可选类型,再判断数据有具体的值,如果有,那么就进行方法,如果数据为空时,系统也不会报错,返回 nil

println("hashValue is\(hashValue)")


//_______________________________________________________________________________________________

/*

总结 "?" 的使用场景:

1.声明可选类型变量

2.用在 Optional值的方法操作,用来判断是否响应后面的操作

*/


//_______________________________________________________________________________________________

//解包(!的用法)

//概念:可选类型数据在每次访问的时候,都会提取并检测它的值是否存在,但是有时候根据程序结构我们可以推断可选量在首次赋值的时候必然存在值,这个时候,就不需要每次验证值是否存在,如果确定一个可选量的值一定存在,那么我们使用 "!"进行解包获取它的值


//_______________________________________________________________________________________________

//代码范例

var possibleString:String? ="An optional string"

println(possibleString!)       //使用 "!"进行解包,当我们确定 possibleString 一定存在时,不用每次验证值是否存在,如果不存在,程序报错


let stringValue = http://www.mamicode.com/possibleString!.hashValue    //解包,这类的 "!"表示这里的 possibleString 一定为非 nil

println(stringValue)


//_______________________________________________________________________________________________

/*

总结:当可选类型数据在被使用或者调用某些属性或者方法的时候,在变量名后面加上 "?" ,保证了变量是可选类型数据,使程序可以正常运行

当可选类型数据在被使用或者调用某些属性或者方法的时候,在变量名后面加上 "!" ,保证了变量时可选类型数据并且有具体的值,使程序运行有意义

*/


//_______________________________________________________________________________________________

//隐式解包的可选类型(!的用法)

//概念:隐式解包可选类型可以看作为自动解包可选类型,即不需要每次使用的时候每次使用 "!"来解包数据保证代码有意义,而是直接在定义的时候加上 "!",这样可以定义隐式解包可选类型(用代替?)


//_______________________________________________________________________________________________

//代码范例

var possibleString1:String! ="An optional string"     //在定义的时候定义为隐式解包类型数据变量,在后面的操作中我们可以在调用数据的时候不需要进行解包

println(possibleString)       //不需要使用 "!"进行解包,因为我们在定义的时候已经定义过了


let stringValue1 =possibleString1.hashValue    //不需要使用 "!" 进行解包,因为我们在定义的时候已经定义过了

println(stringValue1)


//_______________________________________________________________________________________________

/*

"!" 用法总结:

1.强制对可选量进行解包

2.声明隐式解包的可选类型的时候,一般用于类中的属性

*/


//***********************************************************************************************

//12.Assertions(断言)

//_______________________________________________________________________________________________

//定义:Optionals使我们能够检查可能存在也可能不存在的值,并编写代码,优雅地处理缺乏价值。在某些情况下,如果值不存在,你的代码是不可能继续执行。在这些情况下,您可以触发一个断言在代码结束代码执行,并提供一个机会来调试的原因缺失或无效的值。


//_______________________________________________________________________________________________

let ages = 3        //测试断言时将 3改称3

assert(ages >=0,"A person‘s age can‘t be less than zero")        //类似于给用代码给程序打断点来检测程序运行