swift的函数,闭包,单例,KVC以及协议的基本写法

swift的函数,闭包,单例,KVC以及协议的基本写法,第1张

概述一、函数 1.swift是允许函数嵌套,并且外部不可见 2. 调用的时候尽量不采用self 3.类方法调用的函数前面加上class 4. 如果一个类只要求本类中调用,不希望外部可见,就加上private,UI控件的响应事件,不要加上private修饰 5.override 表示函数继承父类 1>.无参无返 func demo01(){ print("无参无返") // 一、函数

1.swift是允许函数嵌套,并且外部不可见

2. 调用的时候尽量不采用self


3.类方法调用的函数前面加上class


4. 如果一个类只要求本类中调用,不希望外部可见,就加上private,UI控件的响应事件,不要加上private修饰

5.overrIDe 表示函数继承父类

1>.无参无返

func demo01(){        print("无参无返")       // 函数嵌套        func demo011(){            print("----------------")        }        // 调用函数        demo011()    }    func demo02()->(){        print("无参无返02")    }    func demo03()->VoID{        print("无参无返03")    }

2>.有参无返

注意:非第一个参数,如果没有外部访问参数,会将形参当成外部访问参数

func lengthOfString(str1 str1:String,str2:String){        print("\(str1)和\(str2)的长度是\(str1.characters.count + str2.characters.count)")    }

3>.无参有返

class func demo04()->String{    return "258963"    }

4>.有参有返

注意:第二个是用中文写的方法名和参数

func demo05(var str1 a:String,str2 b:String)->String{        a += b        return a    }    func 返回拼接参数(第一个参数 str1:String,第二个参数 str2:String)->String{      //  let str3 = "\(str1)\(str2)"       // return str3        return str1 + str2    }
二、闭包

1.相当于OC里面block,封装了一段有特定功能的代码块,且 闭包也可以当做函数的参数

1>.无参无返

let clouse = {        ()->()        in        print("这是一个无参无返的闭包")    }

2>.有参无返

let clouse1 = {        (str:String)->()        in        print("有参无返,参数为\(str)的闭包")    }

3>.无参有返

let clouse2 = {        ()->(Int)        in        let str = "sdsdsdssdsdsd"        return str.characters.count    }

4>.有参有返

let clouse3 = {        (str1 str1:String,str2 str2:String)->(Int)        in        let a = str1.characters.count        let b = str2.characters.count        return a + b    }

2.闭包当做函数参数

1>.声明一个函数

func newStringLength(str1:String,clouse1:(str2:String)->String)->Int{        let str3 = clouse1(str2: str1)        return str3.characters.count    }

2>.在vIEwDIDLoad调用

使用的时候闭包参数直接回车就会是下面样式

let count = newStringLength("hello") { (str2) -> String in            let str5 = "\(str2)world"            return str5        }         print(count)
三、类

1.声明属性以及set方法和初始化方法

var name:String?    var age:Int?//     swift 里面set方法:var 变量名:类型?{ //    dIDSet{//      }//   }        var gender:String?{        dIDSet{            print("gender=\(gender!)")        }    }// 注意:必选类型必须在对象初始化之前进行赋值// 上面属性为可选类型    overrIDe init() {        name = "lisi"        age = 12        super.init()    }

2.重载步骤和OC一样,如果成员变量是必选类型的话,一样要在调用 super.init之前初始化
3. 如果重载了初始化方法,并且没有提供系统默认的初始化方法,并且没有提供系统默认的初始化方法,外界是无法访问到系统默认的初始化方法
原因:没有提供系统默认的初始化方法,调用系统默认的初始化方法时,变量找不到地方初始化

init(name:String,age:Int) {        super.init()        self.name = name        self.age = age    }

4.类方法

// 写法一:    // class 修饰的类方法,能够被子类重载    class func PersonWithnameAndAge(name:String,age:Int)->Person{        return Person.init(name: name,age: age)    }    // 写法二:    // static修饰也表示类方法,不能被子类重载    static func drinkWater(){        print("person drink water")    }
四、KVC

1. KVC 调用流程:KVC(是一种通过字符串间接访问对象属性的一种方式)
1>.setValuesForKeysWithDictionary
2>.setValue(,forKey)如果有找到对象的key值,则初始化并且赋值
3>.setValue(,forUndefinedKey)

var name:String?    var age:Int = 0// 基本数据类型在模型里面不能为可选类型,否则KVC赋值时找不到key,给默认值 0    var gender:String?    init(dic:[String:AnyObject]){        super.init()        setValuesForKeysWithDictionary(dic)    }    overrIDe func setValue(value: AnyObject?,forKey key: String) {        super.setValue(value,forKey: key)    }    overrIDe func setValue(value: AnyObject?,forUndefinedKey key: String) {            }
五、单例
//  单例写法    static let shareInstance:Singleton = {       let instance = Singleton()        return instance    }()   // 单例写法二,类似于一个类方法    static let instance = Singleton()    class func shareSingleton()->Singleton    {        return instance    }
六、协议

1.关键词 protocol

2.protocol 标志符如果前面没有@objc的话,表示协议里面的所有方法都必须实现

3.如果协议里面有一些方法是选择实现的,必须在标识符protocol前面加上@objc ,并且选择实现的那些方法前面加上optional修饰

protocol womanDelegate{    func makeMoney()}@objc protocol womanoptionalDelegate{    optional func makeDiner()    func introduceSelf()}// 设置代理class Woman: NSObject {    var delegate:womanDelegate?    var optionalDelegate:womanoptionalDelegate?}// 在vIEwController里面实现方法,并在VIEwDIDLoad调用        let woman = Woman()        woman.delegate = self        woman.optionalDelegate = self        woman.delegate?.makeMoney()        woman.optionalDelegate?.introduceSelf()
七、网络请求
let urlStr = "http://project.lanou3g.com/teacher/yihuiyun/lanouproject/cinemaList.PHP"        let url = NSURL(string: urlStr)        // 写闭包回调的时候要把参数都写成可选类型        let dataTask = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data,response,error) -> VoID in            // try 如果有出错的话警告            // try! 如果有出错的话程序崩溃            // try? 返回值是可选类型的            // do - catch swift提供的异常抛出机制,程序没问题执行do,出错时捕获异常,执行catch            if let temp = data{            do{            let rootDic = try NSJsONSerialization.JsONObjectWithData(temp,options: NSJsONReadingOptions.MutableContainers)                print("success")            }catch{               print(error)            }           }        }                  dataTask.resume()
总结

以上是内存溢出为你收集整理的swift的函数,闭包,单例,KVC以及协议的基本写法全部内容,希望文章能够帮你解决swift的函数,闭包,单例,KVC以及协议的基本写法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存