一:基本知识点
1:类型标注
var welcomeMessage:String前面为定义的变量名,后面为类型.注意:swift中不要求为每一条语句添加分号,如果把多行放到一个物理行,那就必须添加分号.如下:
let mystring = "Hello World";println(mystring) 打印为 Hello World
2:类型别名表示为已经存在的类型定义一个别名,其关键字为typealias.
typealias age = UInt8
var myAge:age =1
println(myAge)
3布尔类型 swift为布尔类型提供了2个常量值来表示,分别是true和false
let isPassWordCorrect = false
let areYouAChinese = true
if isPassWordCorrect{
println("欢迎登陆!")
}else{
println("对不起,登陆失败!")
}
4字符串的创建和初始化
var emptyString = "" 用空支付字面量,创建一个空的字符串
var anothrtEmptyString = String() 使用构造器,创建一个空字符串
if emptyString.isEmpty{
println("空字符串!")
}
5字符串和字符的连接可以使用+ 或者+=来连接2个不同的字符串.也可以使用 String的 append方法
let string1 = "Hello"
let string2 = " there"
var welcome = string1 + string2
println(welcome) 打印为:Hello there
var instruction = "look over"
instruction += string2 对象必须定义成var才可以进行赋值
println(instruction) 打印为:look over there
let mark:Character ="!"
welcome.append(mark)
println(welcome) 打印为:Hello there!
6字符串内插使用\()来构建一个新的字符串括号中放置内插的表达式,常量,变量或者字面量值.
let stringValue = "hello, boy!"
println("\(stringValue)") 打印为: hello, boy!
7元组 swift使用元组来归类多个具有任意类型的相关联的值.
let http404Error = (404,"Not Found") 该元组的类型为(Int,String)
let (statusCode, statusMessage) = http404Error
println("状态码为\(statusCode)") 获取元组中的值. 状态码为 404
println("状态信息\(statusMessage)") 状态信息 Not Found
println("状态码为\(http404Error.0)") 通过下标获取对应数据
也可以通过给元组里面的数据取名的方式来解绑里面的数据
let http200Status = (statusCode :200 , statusMessage :"ok")
println("状态码为\(http200Status.statusCode) 状态信息\(http200Status.statusMessage)") 状态码为 200 状态信息 ok
8可选类型可选类型的引入主要是解决有何无的问题.可以通过可选类型来声明变量或者常量,如果我们定义了一个常量或者变量但是忘记了初始化,swift将会自动把改可选类型的值设置为nil.
let optionalInt: Int? =866
var optionalString: String? = "How are you!"
记住:一旦确定可选类型里面有值,我们就可以在Optinal类型变量或常量后加叹号(!)来强制使用Optinal类型里面的值.
println("\(optionalInt)\(optionalString)") 打印 Optional(866) Optional("How are you!")
println("\(optionalInt!)\(optionalString!)") 打印 866 How are you! 这里是隐式解析可选类型确定器有值.
9数组 数组类型的写法Array<String> [String] 表示数组类的数据类型String类型
var shoppingList : Array<String> = ["swift","oc"]
var shoppingArray : [String] = ["egg","milk"]
var shoppingArr = ["boy","girl",123,true]
注意:1)如果我们在定义数组时显示的指定了数组中的数据类型,则该数组中必须统一存放该类型的值,存放其他类型的值会报出编译时错误.2)如果我们定义数组时不指定数组的数据类型,则该数组默认为AnyObject类型.
for item in shoppingList{
println("\(item)")
}
var someInts = [Int]() 创建一个空数组
var nameOfInterger = [Int:String]() 创建一个空字典
10 结构体 定义格式 sturct 名称:协议...{属性和方法}
struct Sword {
var width: Float
var name: String
func description(){
println("这是一把名为\(name)的剑,身长\(width)")
}
}
var sword : Sword =Sword(width: 1.5, name:"龙泉") 成员构造方法,初始化 SWord这个结构体实例.
sword.description()这是一把名为龙泉的剑,身长1.5.点语法访问内部属性.
11枚举类型 枚举用来存储一组相关数据的通用类型.
enum Paltform{
case Windows
case Linux
case Macos
}
也可以这样声明
enum Paltform1{
case Window,Linux,Macox
}
注意: swift 中的枚举成员的值就是本身,如:Platform.Windows.
var myPlatform = Paltform.Windows
switch myPlatform{
case .Windows:
println("这是Windows平台")
case .Linux:
println("这是Linux平台")
case .Macos:
println("这是Macos平台")
}
12区间运算符闭区间(...) 比如: a...b 意思是a到b并且包含b在内半开区间 比如: a..<b 从a到b但不包括b在内.
for index in10...15{
println("\(index)")
}
/*
10
11
12
13
14
15
*/
for index in10..<15{
println("\(index)")
}
/*
10
11
12
13
14
*/
13 switch中的case专题
13.1 case支持简单字面量
var cardOwenerQueue = ["大陆同行证","台湾同行证","香港通行证","美国通行证"]
var cardType = "大陆同行证"
switch cardType{
case "大陆同行证":
println("请去1号柜台办理!")
case "台湾同行证":
println("请去2号柜台办理!")
case "香港通行证":
println("请去3号柜台办理!")
case "美国通行证":
println("请去4号柜台办理!")
default:
println("对不起,暂时不支持此证办理!")
}
13.2 case支持元组
var students = ("重邮",2007)
switch students{
case ("北大",2007):
println("天之骄子的一代!")
case ("重邮",2007):
println("就业率最高的一代!")
case ("清华",2007):
println("拔尖的一代!")
default:
println("务实的一代!")
}
13.3 case支持区间操作
var enemyPosition = 55
switch enemyPosition{
case 0...15,65...100:
println("第一区域!")
case 45...65:
println("第二区域!")
default:
println("第三区域!")
}
13.4 case支持绑定和条件绑定
var enemyPositionTwo = (54,54)
switch enemyPositionTwo{
case let (x,55): println("敌人进入警戒区域,暂时未动,当前坐标为[\(x):55]")
case let (x, y)where x == y: println("敌人进入水域")//敌人进入水域
case let (x, y)where x < 45 && x >35: println("敌人很嚣张")
default:println("小心谨慎")
}
case后面let (x, y)形式叫做值绑定,caselet (x, y) where x == y条件绑定.从下面开始另外写一遍博客文章.
14函数
func sayHello(personName:String) ->String{
let greeting = "你好," + personName +"!"
return greeting
}
println(sayHello("老码"))
定义函数的时候可以在内部参数名称前定义外部参数,并使用空格分隔.好比如:
func creatFamily(motherName: String, fatherName : String, babyName: String) ->String{
return "妈妈是" + motherName +",爸爸是" + fatherName +"他们的宝宝是" + babyName
}
调用函数
println(creatFamily("Jenna","Eyang","Yoyo") )
对比一下 #机制表示内部参数名也可以作为外部参数名
func creatFamily1(#motherName: String,#fatherName : String, #babyName:String) ->String{ return "妈妈是" + motherName +",爸爸是" + fatherName +"他们的宝宝是" + babyName
}
调用函数这样参数名称意思清楚很多.
println(creatFamily1(motherName:"Jenna", fatherName: "Eyang", babyName: "Yoyo"))
14.2 可变参数
func sum(numbers: Int...) ->Int{
var total: Int =0
for number in numbers{
total += number
}
return total
}
上面sum函数的定义提供在参数列表后面加...的方式来定义可变参数.调用这个函数的时候,我们可以根据自己的需求传入多个参数.
println( sum(1,2,3,4,5,6,7))结果28
注意:1传入可变参数的值在函数体内被当做该参数的一个数组.2一个函数至多只能够有一个可变参数.3可变参数必须放在参数列表的最后.如果可变参数放在参数列表的中间,谁知道哪个值是最后一个传入的参数呢?系统完全无法做出判断.因此小伙伴切记可变参数必须放在函数列表的最后.
14.3默认参数 就是在函数定义的时候给参数列表里面的几个或全部参数赋默认值.被赋予的默认值的参数可以在调用的时候不用传值,但是当该参数有值传入的时候,则会使用新的参数值,忽略默认值.
func sayHelloToYou(personName: String, isMale:Bool = true) ->String{
var greet: String
if isMale{
greet ="你好" + personName +"帅哥"
}else{
greet ="你好" + personName +"美女"
}
return greet
}
println(sayHelloToYou("老码", isMale:false))
这里注意了:如果我们自己没有给默认参数添加外部参数名,那么swift会给带默认参数取个和内部参数名一样的外部参数名.默认参数一般放在最后,但是当跟可变参数一起的时候,可变参数放在最后.
14.4参数性别是常量函数变量 函数参数默认是常量,在函数体内对参数进行更改会出错的.但是swift允许你吧参数定义成为变量,这样在函数体力改变这个变量的值就不会报错,同时也要注意:函数体内对参数改变只在函数体内有效,其改变不会影响到函数外.
func factorial(var number:Int) ->Int{
var result: Int =1
while number > 1 {
result = result + number
number = number -1
}
return result
}
var number: Int =4
println( factorial(number)) 结果为:10
println(number) 结果为:4
14.5让我变,不管函数内外.swift设计了输入输出参数"inout"机制来处理函数体实参改变问题.只需要在需要被改变的参数名字前面加上inout关键字就可以把这个参数指定为输入输出参数,这样参数如果在函数体内部被修改,修改的最终结果会反映到实参.
func swap(inout a:Int, inout b:Int){
let temporary = a;
a = b
b = temporary
}
var a: Int =1
var b: Int =2
swap(&a, &b)
println("\(a)\(b)")//结果:2 1
注意几点:1)只能够传入变量作为参数,也就是a,b只能够是通过 var声明的变量.2)输入输出参数不能够带有默认值.3)如果使用了关键字inout标记了一个参数,这个参数不能够再被var或者let去标记.也就是inoutvar a ,inoutlet a.
14.6函数是一种类型 每个函数都是一种类型
func count(){
println("Hello world!")
}
上面这个函数的类型就是()->(),函数的类型有函数的参数类型和返回值类型组成.中间用->链接,上面函数的参数和返回值都是空,使用类型是()->().怎么读呢?这个函数类型没有参数也没有返回值.
14.6.2函数类型的变量和常量 因为函数就是一种类型,可以理解为定义一个整形变量,函数类型看成整形.