Swift学习笔记

  • 数据类型

Swift类型大致可以分为3种基本个类型:structures,classes,enumerations
这三种类型都有:

  • properties属性:有原始类型的值
  • initializers:初始化属性
  • instance 方法:实例方法
  • 类方法,类调用的方法

swift的原始类型比如number,boolean,很特别,都是structures.这些类型都是structures:

  • Numbers: Int,Float,Double
  • Boolean: Bool
  • Text: String,Character
  • Collections: Array,Dictionary,Set

这就意味着标准的类型有属性,初始化方法.还可以实现协议和扩展自己.

还有一个关键的类型:optional,允许你存储一个特殊类型的值或者nil值.

  • 使用标准类型

声明变量的关键字:var
常量:let

var str = "Hello World!"

let name = "Jak"

类型推导:在我们声明变量的时候,并没有明确类型,这是swift语言支持的特点,编译器会根据赋值,自动推导变量的类型.

我们也可以显示的声明变量的类型

   var nextYear :Int
   var hasPet: Bool
   var arrayOfInts:Array //var arrayOfInts:[Int]
   
   var dictionary: Dictionary
   //var dictionary :[string:string]
   var setOfNumbers:Set

  • 集合类型

Swift标准库提供了三种集合类型:arrays,dictionaries,sets

array是有序的同种类型的元素集合,写法Array,(T代表Type),数组的元素可以是任意类型:标准类型,结构体或者类
数组是强类型,一旦声明一个数组的元素类型,比如Int,就不能添加Int类型之外的元素.

声明数组的简短写法:

var arrayOfInts:[Int]

dictionary是键值对(key-value)的无序集合.值可以是任意类型数据,key可以是任意类型,但必须是唯一的,可以哈希的,这种特性保证了访问某个值时的高效性.Swift的基本类型Int,Float,Character,String都是可以哈希的.

和数组类似,dictionary也是强类型,只能包含声明类型的key和value.

var dictionaryOfCapitalsyCountry:Dictionary
var dictionaryOfCapitalsyCountry:[String:String]

set和array数组类似,包含多个类型确定的元素.不同的是,元素是无序的,不能重复,可哈希的.

var winningLotteryNumber:Set

  • 初始化方法

变量和常量都是字面初始化:先声明某个类型的实例,之后赋值.实例多数体现在类上.在Swift用来描述结构体和枚举.

例外一种创建实例变量的方式是通过初始化方法调用.是某个类型的初始化方法的内容响应.当初始化方法完成时,实例就创建了.使用初始化方法创建实例,使用类型名加上括号,如果需要参数,就传参.

有些标准类型的初始化方法会返回空字面量,如果需要参数而没有传入.


let emptyString = String()         //""
let emptyArrayOfInts = [Int]()   //0个元素
let emptySetOfFloats = Set() //0个元素
let defaultNumber = Int()      //0
let defaultBool = Bool()   //false

有些类型可能有多个初始化方法比如String,Float,Set等

  • 属性(property)

属性是一个类型的实例的值.比如String的isEmpty属性,是个bool值,表示字符串是否为空.Array的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
}

你可能感兴趣的:(Swift学习笔记)