一 swift简介
Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。它与Java和JS很像,不论其方法还是属性都是用点语法,而且其语法简明,只有.swift文件,这点它比OC方便很多,不像OC那种到处都是@和[ ]。这就使得其他语言从事者很好的融入苹果的开发环境中来,自从接触了Swift编程,看到JAVA和JS代码就感到亲切。swift声明一个类只会生成一个.swift文件,通过Public和private关键字确定该方法是否暴露在外界。
二 swift学习
Swift 变量
变量是一种使用方便的占位符,用于引用计算机内存地址。
Swift 每个变量都指定了特定的类型,该类型决定了变量占用内存的大小,不同的数据类型也决定可存储值的范围。
变量声明
变量声明意思是告诉编译器在内存中的哪个位置上为变量创建多大的存储空间。
在使用变量前,你需要使用var关键字声明它,如:varstr2 =String(format:"%02d:%02d",1,2)
swift 常量需要用let关键字来申明 一旦声明,不可修改。
变量命名
变量名可以由字母,数字和下划线组成。 变量名需要以字母或下划线开始。 Swift 是一个区分大小写的语言,所以字母大写与小写是不一样的。
常量命名
常量的命名可以由字母,数字和下划线组成。
常量需要以字母或下划线开始。
Swift 是一个区分大小写的语言,所以字母大写与小写是不一样的。
常量名也可以使用简单的 Unicode 字符,
变量输出
变量和常量可以使用print(swift 2 将 print 替换了 println) 函数来输出。如:print(str2)print("index =\(index),value =\(value)")
Swift 可选(Optionals)类型
Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值”。用?标识
!表示强制解包 通过强制解包 可以拿出真实数据
例如:var a1:String?(可选类型)
print(a1!.characters.count)(强制解包)
情况一
值得注意的是 如果可选类型写成var a1:String? = nil 之后对这种形式的可选类型进行强制解包的情况下,系统会crash
crash信息为unexpectedly found nil while unwrapping an Optional value
情况二
print((a1 ?? "234").characters.count)表示当可选类型为空时,对可选类型进行赋值,值为234
情况三
var a1:String? = nil
a1 = “12345”可以在可选类型为空得时候进行赋值
总结:对可选类型进行强制解包时,首先要确定可选类型不能为空
2 swift数据类型
Int整数类型 长度与当前平台的原生字长相同(就是在32位平台上,Int与Int32长度相同;在64位平台上,Int与Int64长度相同)
浮点数 浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。(精度很高,至少有15位数字)
Float表示32位浮点数。精度要求不高的话可以使用此类型。(至少只有6位数字)
布尔值swift中只有true 和 false没有非零即真这一说法
字符串(字符的序列化组合)
let str = "hello"
字符串的长度
str.characters.count 和str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) 两种形式
大小写转换
str.uppercaseString(大写)str.lowercaseString(小写)
字符串的拼接
letstr2 =String(format:"%02d:%02d",1,2)
letstr3 =String(format:"%02d:%02d", arguments:[1,2])
print(str2)
print(str3)
print("\(str2)\(str3)")
字符串的剪切
str2.substringToIndex(<#T##index: Index##Index#)
字符串的强转(本来str2是String类型)
letstr4:NSString=str2asNSString
数组
不可变数组
initWith/init在swift里面全部转化为()创建字符串数组
letarray2 = [String]()
也可以直接赋值
letarray1 = ["A","2","3","4","f"]
数组的遍历 (as[String] 明确指出数组的类型,不指明也可以,根据数组的元素,系统可以确认)
fortempinarray1as[String]{
print(temp.characters.count)
}
元祖遍历可以拿到数组的元素的下标enumerate枚举(其实就是在遍历数组的同时,数组元素的下标也一块遍历出来)
for(index,value)inarray1.enumerate()
{
print(index,value)
print("index =\(index),value =\(value)")
}
可变数组
varmutableArray = [String]() 先创建
mutableArray.append("hello”) 数组添加元素
mutableArray.removeFirst(<#T##n: Int##Int#>)参数表示数组从第一个元素开始移除到第Int个元素
mutableArray.removeAll()移除所有的元素
mutableArray.removeAll(keepCapacity: <#T##Bool#>)移除所有的元素 是否保留原来的内存 BOOL值 true or false
注意:1.可变数组在创建的时候,已经定义数组内的元素只能是String类型,mutableArray.append(23) 会报错
2.swift中数组可以添加任意类型的元素,只要在数组创建的时候注明即可,但是oc不行,oc只能添加对象类型的元素
字典
1 不可变字典 (性质和oc一样,无序性)
letdic = ["key1":"value1","key2":"value2","key3":"value3"]
遍历
for (key,value) in dic{
print("key = \(key),value = \(value)")
}
2 可变字典 (性质和oc一样,无序性)
vardict = ["key1":"value1","key2":"value2","key3":"value3"]
dict.removeValueForKey("key2”) 删除value
3 字典的合并
通过遍历来合并的如果key存在的则是一个更新键值对的操作,否则的话就是增加自身没有的键值对 (有则改之,无则加之)
for(temoKey,tempValue)indic{
dict[temoKey] = tempValue
}
条件分支
最基本的原则就是:在swift中,条件语句的括号( )可以省略,但是函数体的大括号{ }不能省略
1 最简单的if语句
lettempValue =10
iftempValue>5{
print("tempValue > 5")
}
可选类型的条件分支
letstr:String? ="hello"
print(str)
print(str!)
2if - let (就是为了拿取解包值)
对应的时可选类型如果可选类型为nil则不执行代码块如果可选类型的值不为空则用tempStr来接受此刻可选类型解包后的值
iflettempStr =str{
print(tempStr)
}
3if - let - where
跟if - let相似,where是对前面定义的这个局部变量再做一层判断 (where后面加个条件,条件为真,执行if - let; 条件为假,不执行前面的if - let)
iflettempStr =strwheretempStr.characters.count>4{
print("tempStr.length =\(tempStr.characters.count)"
}
4guard - let -else (guard守护)
如果可选类型str为nil,则执行code代码块。最后一定要return,如果不为nil则强制解包的值赋给tempStr,这样在{}外面就可以使用tempStr
let str:String? = "hello"
guard let tempStr = str else
{
print("str = nil")
return如果可选类型str为nil,则执行code代码块。最后一定要return return指的是全部返回,不会执行下面的打印函数
}
print(tempStr)
5 switch
在 swift 中 不局限判断整型 可以为浮点型,也可以为字符串 等等注意:在oc里,只能是整型
switch判断后面的小括号可以省略和if是一样的case后面至少有一条执行语句并且case后面的大括号可以省略,break可以不写不会造成贯穿default一定要写并且只能写在最后
6 循环
for var i = 0; i < 5; i++ {
print(i)
}
相当于下面
for i in 0..<5{
print("i = \(i)")
}
7枚举
将一些列的整型和我们的字符串关联起来在swift里面可以关联任意类型如果是整型会默认的关联上去如果不是Int必须每个枚举值都关联上去
enumMonth:Int{
caseJanusry =10
caseFebruary
caseMarch
caseMay
caseJune
caseJuly
caseApril
}
//let month = Month.Janusry
letmonth:Month= .Janusry
varmonth1 =Month.February
month1= .March//上面已经确定了类型所以这里直接点
switchmonth{
case.Janusry:
print(month)
case.February:
print(month)
case.March:
print(month)
case.May:
print(month)
default:
print("时差")
}