美文网首页iOS DeveloperiOS 开发
Swift项目开发:----swift知识点准备(持续更新)

Swift项目开发:----swift知识点准备(持续更新)

作者: 石头剪刀布艳艳 | 来源:发表于2016-07-21 20:57 被阅读151次

    一、基础的几个知识点,很简单,但是必须知道和掌握

    1.常量和变量

    var:变量修饰词

    let:常量修饰词

    2.字符串获取长度(两种方法)

    let str1 = "hello"

    str.characters.count

    let str2 = "hello"

    str2.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

    3.大小写转换

    转大写:str.uppercaseString

    转小写:str.lowercaseString

    4.判断相等

    直接用“==”来判断

    5.拼接

    let str2 = String(format: "%02d:%02d", 1,2)

    let str3 = String(format: "%02d-%02d", arguments: [1,2])

    print(str2)

    print(str3)

    6.剪切字符串

    str2.substringFromIndex(index: Index)

    7.字符串其他操作转化为NSString在去操作

    let str4:NSString = str2 as NSString

    8.数组相关知识

       8.1swift的数组可以和oc的数组转换,在OC中init/ initWith在swift就是转化为()来表示初始化

    let array1 = ["a","b","c"]

    let array2 = [String]()

    8.2 数组个数

    数组个数.count

    8.3 遍历数组

     遍历数组forin要明确的指出数组的类型

    for temp in array1 as [String] {

    print(temp)

    print(temp.characters.count)

    }

     8.4 元组遍历

    //元组遍历(能得到下标)

    for(index, value) in array1.enumerate() {

    print("index = \(index),value = \(value)")

    }

    8.5可变数组

    初始化一个String类型的数组: var mutableArray = [String]()

    向数组添加元素:

    mutableArray.append("hello")

    mutableArray.append("world")

    mutableArray.append("23")

    print(mutableArray)

    打印之后的结果:["hello","world","23"]

    mutableArray.removeAll(keepCapacity: Bool)一出全部,是否保存原有的空间

    mutableArray.removeFirst(n: Int)从哪个为第一个开始删除

    9.字典

    9.1 创建一个字典:

    let dict = ["key1":"value1","key2":"value2","key3":"value3"]

    print(dict)

    print(dict["key1"])

    9.2 遍历字典forin

    for(tempkey,tempvalue) in dict {

    print("key = \(tempkey),value = \(tempvalue)")

    //在swift中站位用\( )表示,括号内填要输出的参数

    }

    9.3 可变字典

    var dict3 = ["key":"value"]

    9.4 字典的合并

    for(tempkey,tempvalue) in dict {

    //如果存在则是一个更新键值对的操作,否则就是一个增加键值对的操作

    dict3[tempkey] = tempvalue

    }

    10.可选类型

    10.1 

        如果一个值可能为nil,那么这个值就是可选类型,用?表示。同样在打印后在输出栏显示时被optional包围的就是可选类型

    10.2 

        可选类型不能直接使用,必须强制解包,!就是强制解包。对nil强制解包会crash。当在打印的输出栏显示 “unexpectedly found nil while unwrapping an Optional value”时,就是对空的可选类型强制解包出现的错误

    10.3 一个简单示例

    var a1:String?

    a1 = "12345"

    print(a1!)

    print(a1!.characters.count)

    10.4 对可选类型进行判断,若为空则给他一个默认值

    print(a1 ?? "234")

    11 if语句

    if语句和OC中不同的是()的条件语句可以省略。if没有非零即真的概念,只有true和false的概念

    let temvalue = 10

    if temvalue > 5 {

    print("tempvalue >5")

    }

    14. 可选类型的条件分支

    letstr:String? ="hello"

    (1) if-let对可选类型的判断,若可选类型为空,不执行代码块,若果不为空,则用tempstr来接受此刻这个可选类型解包后的值

    if let tempStr = str {

    print(tempStr)

    }

    (2)if-let-where跟if-let相似,where是对前面定义的这个局部变量在做一层判断

    if let tempStr = str where tempStr.characters.count>2{

    print("tempStr.length =\(tempStr.characters.count)")

    }

    (3)guard-let-else(守护)如果可选类型为nil,则执行code代码块,最后一定要return,如果不为nil则强制解包后的值赋给tempStr这样在外面可以使用tempStr

    guard let tempStr = str else {

    return

    }

    tempStr

    15  switch

    在swift的switch中不局限整形,可为浮点型,字符串型,

    switch后面的小括号可以省略,大括号不能省略

    case后面至少有一条执行语句,并且case后面的大括号可以省略,

    break可以不写,不会造成贯穿,default一定要写,并且只能在最后写

    let f =3.2

    switch f {

    case3.0:

    print("===3.0")

    case3.1:

    print("===3.1")

    case3.2:

    print("3.2")

    default:

    print("unknown")

    }

    16 循环

    下面的方法已经被废弃

    for (var i = 0;i < 5;i++) {

    }

    正确的是

    for var i = 0; i < 5; i++ {

    print(i)

    }

    在左闭右开区间[0,5)循环

    for var i in 0..<5 {

    print(i)

    }

    在闭区间[0,5]循环

    for var i in 0...5 {

    print(i)

    }

    17 枚举(枚举可以关联任何类型浮点,字符串,整型)

    关联若是int,会默认递增上去,若不是int必须每个枚举值都关联上值。

    enumMonth:Float{

    caseJanuary =1.1

    caseFebruary =1.2

    caseMarch =1.3

    caseAppril =1.4

    caseMay =1.5

    caseJune =1.6

    }

    varmonth1:Month=Month.January

    letmonth2 =Month.February

    letmonth3:Month= .March

    //如果已经明确的指出一个变量是属于那种类型的枚举的话,可以直接给枚举赋值

    month1= .Appril

    switchmonth1{

    case.January:

    print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

    case.Appril:

    print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

    case.March:

    print("hashvalue=\(month1.hashValue),rawValue =\(month1.rawValue)")

    default:

    print("unknown")

    }

    18 闭包

    {

    (参数名:参数类型(多个参数逗号隔开))->返回值类型

    in

    code(自己写代码)

    }

    19 函数

    函数的写法:

    func方法名(参数列表)->返回值类型{

    code

    }

    19.1 无参无返

    let closure = {

    ()->()//()或者()->Void

    in

    print("无参无返")

    19.2 有参有返

    func add(a:Int)->Int {

    return a+10

    }

    print(add(100))

    19.3无参有返

    func abb()->String {

    return "无参有返"

    }

    print(abb())

    19.4有参无返

    func acc(a:Int)->Void {

    print("有参无返")

    }

    print(acc(1))

    20 输入俩个字符串,输入一个闭包(将输入的两个字符串拼接为一个字符串)

    编写函数:

    func combineString(str1:String,str2:String,closure:(tempstr1:String,tempstr2:String)->String) {

    //执行闭包

    letstring = closure(tempstr1: str1, tempstr2: str2)

    print(string)

    }

    调用:

    combineString("love", str2:"you") { (tempstr1, tempstr2) ->Stringin

    return"\(tempstr1)\(tempstr2)"

    }

    21.OC中有的懒加载在swift中也有

    写法:

    lazy var变量名:变量类型= {

    code

    return

    }()

    代码:写懒加载一个不同

    lazy var btn:UIButton= {

    var tempBtn =UIButton(type:.ContactAdd)

    tempBtn.frame=CGRectMake(90,200,50,50)

    tempBtn.backgroundColor=UIColor.greenColor()

    returntempBtn

    }()

    22.异常捕获(很经典)

    在OC中我们解析文件或者网络解析时当解析的文件中有错时,会crash,但是在swift中有了异常捕获这个方法,会很容易的知道文件解析出错,不用再看代码半天找bug。

    do{

    let path =NSBundle.mainBundle().pathForResource("iOS", ofType:"json")

    let data:NSData=NSData(contentsOfFile: path!)!

    let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers) as!  [[String:String]]

    print(rootArray)

    } catch {

    //异常捕获。序列化出错就会自动来到这里

    print("error")

    }

    23 字典转模型

    在KVC模式中。我们 会用到字典转模型给model赋值。一般的OC中写的方法是setValuesForKeyWithDictionary:的方法但是在swift中不是!下面就看看该怎么写。

    在model文件中编写:

    var name:String?

    var gender:String?

    var age:Int=0//注意:字典转模型中,模型中如果有基本的数据类型的话,基本的数据类型不可以给我可选类型,否则在KVC赋值就会出现错误找不到对应的Key值。若为可选类型该给初始值

    //字典转模型

    init(dict:[String:AnyObject]) {

    super.init()

    setValuesForKeysWithDictionary(dict)

    }

    如果自定义了初始化方法并且没有实现系统默认的初始化方法,那么外界访问不到该类的默认初始化方法,想要访问到就要手动实现

    刚写到KVC模式,就想到面试题里有的会问的“KVC和KVO的区别”,很搞笑,这两个压根没啥关系!(要非扯有关系,就得说:KVO建立在 KVC 之上)

    KVC:Key Value Coding (键值编码)通过字符串简介访问对象的属性的方式 

    KVO: Key Value Observing(观察着模式) 通过字符串来监听对象属性的变化

    相关文章

      网友评论

        本文标题:Swift项目开发:----swift知识点准备(持续更新)

        本文链接:https://www.haomeiwen.com/subject/ipgbjttx.html