- 数据类型
Swift类型大致可以分为3种基本个类型:structures,classes,enumerations
这三种类型都有:
- properties属性:有原始类型的值
- initializers:初始化属性
- instance 方法:实例方法
- 类方法,类调用的方法
swift的原始类型比如number,boolean,很特别,都是structures.这些类型都是structures:
- Numbers: Int,Float,Double
- Boolean: Bool
- Text: String,Character
- Collections: Array<T>,Dictionary<k:Hashable,v>,Set<T:Hashable>
这就意味着标准的类型有属性,初始化方法.还可以实现协议和扩展自己.
还有一个关键的类型:optional,允许你存储一个特殊类型的值或者nil值.
- 使用标准类型
声明变量的关键字:var
常量:let
var str = "Hello World!"
let name = "Jak"
类型推导:在我们声明变量的时候,并没有明确类型,这是swift语言支持的特点,编译器会根据赋值,自动推导变量的类型.
我们也可以显示的声明变量的类型
var nextYear :Int
var hasPet: Bool
var arrayOfInts:Array<Int> //var arrayOfInts:[Int]
var dictionary: Dictionary<string:string>
//var dictionary :[string:string]
var setOfNumbers:Set<Int>
- 集合类型
Swift标准库提供了三种集合类型:arrays,dictionaries,sets
array是有序的同种类型的元素集合,写法Array<T>,(T代表Type),数组的元素可以是任意类型:标准类型,结构体或者类
数组是强类型,一旦声明一个数组的元素类型,比如Int,就不能添加Int类型之外的元素.
声明数组的简短写法:
var arrayOfInts:[Int]
dictionary是键值对(key-value)的无序集合.值可以是任意类型数据,key可以是任意类型,但必须是唯一的,可以哈希的,这种特性保证了访问某个值时的高效性.Swift的基本类型Int,Float,Character,String都是可以哈希的.
和数组类似,dictionary也是强类型,只能包含声明类型的key和value.
var dictionaryOfCapitalsyCountry:Dictionary<String,String>
var dictionaryOfCapitalsyCountry:[String:String]
set和array数组类似,包含多个类型确定的元素.不同的是,元素是无序的,不能重复,可哈希的.
var winningLotteryNumber:Set<Int>
- 初始化方法
变量和常量都是字面初始化:先声明某个类型的实例,之后赋值.实例多数体现在类上.在Swift用来描述结构体和枚举.
例外一种创建实例变量的方式是通过初始化方法调用.是某个类型的初始化方法的内容响应.当初始化方法完成时,实例就创建了.使用初始化方法创建实例,使用类型名加上括号,如果需要参数,就传参.
有些标准类型的初始化方法会返回空字面量,如果需要参数而没有传入.
let emptyString = String() //""
let emptyArrayOfInts = [Int]() //0个元素
let emptySetOfFloats = Set<Float>() //0个元素
let defaultNumber = Int() //0
let defaultBool = Bool() //false
有些类型可能有多个初始化方法比如String,Float,Set等
- 属性(property)
属性是一个类型的实例的值.比如String的isEmpty属性,是个bool值,表示字符串是否为空.Array<T>的count属性,用来计算数组元素个数.
- 实例方法
实例方法是一个方法,可以被对应类型的实例调用.比如Array类型的实例方法append(_:),添加元素.
- Optional可选类型
Swift的类型可以是可选的,通过在类型后面添加?符号.
var anOptionalFloat:Float? //nil
一个可选类型表示可能这个变量根本没有存贮值.可能是某种规定类型的值或者nil
- 字典下标
数组下标越界会导致崩溃.Dictionary不一样,它的下标是一个optional值
也就是说当访问了字典一个不存在的下标,会返回nil值.
- 循环和String过滤
Swift有其他语言的控制结构:if-else,while,for,for-in,repeat-while,switch.尽管类似但是还是有不同的地方.最主要不同的地方是括号的需要与否,Swift并不一定需要括号来声明范围.if和while语句必须是bool值.
//loop
for var i=0;i<10;++i{
let string = array[i]
Println(string)
}
//range语句
let range = 0..<10
for i in range{
let string = array[i]
Println(string)
}
//获取数组的下标和值
for(i,string) in array.enumerate(){
//元素是元组(0,"0")
}
//字典枚举
let nameByParkingSpace = [13:"Alice",32:"Bob"]
for (space,name) in nameByParkingSpace{
let permit = "Space \(space):\(name)"
}
- 枚举和原始值(raw)
Swift枚举
enum PieType:Int{
case Apple = 0
case Cherry
case Pecan
}
对于给定的类型,可以访问一个PieType实例变量的rawValue即它的初始化时的值.会返回一个optional,因为rawValue可能和真实类型不同,所以座位optional的绑定值.
let pieRawValue = PieType.Pecan.rawValue //2
if let pieType = PieType(rawValue:pierawValue){
//使用pieType
}