日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift3.0温习之基础篇

發布時間:2024/8/26 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift3.0温习之基础篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

重新系統的溫習一下swift3.0的東西,因為一兩個月不用,有的東西就記得不是太清楚了。以下整理了一些基礎的知識,如果哪里寫的有問題,還請指出我馬上做修改。后續還會有一些關于swift的文章會持續更新,如果有興趣請關注我。

目錄

  • 函數使用的注意事項

  • 類的使用

  • 閉包

  • 懶加載

  • 自定義Log信息

一、函數

使用注意一

  • 函數的參數,內部參數和外部參數。
    • 內部參數:在函數內部可以看的見的參數是內部參數,默認都是內部參數。
    • 外部參數:就是外部可以看見的參數,為外部參數。默認從參數的第二個開始都是外部參數。
//有返回值的函數 func sum(num1 : Int, num2 : Int) -> Int {return num1 + num2; } //不帶默認參數的函數 func makeEatFood(foodName: String) -> String {return "吃了\(foodName)" }

使用注意二

使用注意三

  • 可變參數:在參數的后面添加...,表示可變參數。
//可變參數 func makeEatFood(foodName: String ...) -> String {return "吃了\(foodName)" }makeEatFood(foodName: "河牛","海魚","馬沙")

使用注意四

  • 函數的指針:使用關鍵字func swap( a : inout Int, b : inout Int){}
//函數指針,交換兩個變量的值 var a = 50 var b = 100func swap( a : inout Int, b : inout Int){let temp = aa = bb = temp }swap(&a, &b)print("a:\(a), b:\(b)")

使用注意五

  • 函數的嵌套使用
//函數嵌套使用 func nestTest(){func test1(){print("test1")}print("nestTest")//這里先被調用:1//這里調用test1()的打印情況是:先打印nestTest,再打印 test1()test1()//:2 }//這里調用的時候,只會打印nestTest,因為并沒有調用test1()這個方法 nestTest()

二、類

類的創建:class

  • 分為繼承自NSObject和不繼承自NSObject。
class Person{var age : Int = 0 }let p = Person()p.age = 20 class Person : NSObject {var age : Int = 0//這時下面的代碼就非常的有用,否則就會報錯override func setValuesForKeys(_ keyedValues: [String : Any]) {} }let p = Person()p.age = 20 //正常的情況下 //p.setValuesForKeys(["age" : 100])//不正常的情況下處理,添加沒有屬性到類屬性中 p.setValuesForKeys(["age" : 100, "name" : "marlonxlj"]) p.age

類的屬性,定義就不再做詳細介紹

  • 存儲屬性
  • 類屬性
  • 計算屬性
class Student: NSObject {//定義屬性,需要做初始化var age : Int = 0//可選類型var name : String?var englishScore : Double = 0.0var chineseScore : Double = 0.0//計算屬性var averScore : Double {return (englishScore + chineseScore) * 0.5}//類屬性,一般用來定義單例static var stuCount : Int = 0 }//給類屬性賦值 Student.stuCount = 5//創建對象 let stu = Student() //給對象賦值 stu.age = 10 stu.name = "marlonxlj"print(stu.age)//對可選包進行解包 if let name = stu.name{print(name) }stu.englishScore = 80 stu.chineseScore = 50 print("\(stu.averScore)")

類的構造函數

  • 構造函數類似于oc中的初始化方法:init
  • 默認情況下創建一個類時,必然會調用一個構造函數
  • 即便沒有寫任何的構造函數,編譯器也會提供一個默認的構造函數
  • 如果繼承自NSObject可以對父類的構造函數進行重寫

構造函數的基本使用

  • 類的屬性必須有值
  • 如果不是在定義時初始化值,可以在構造函數中賦值
class Person : NSObject {var name : String?var age : Int = 0override init() {//在構造函數中,如果沒有明確super.init(),那么系統會默認幫我們調用//super.init()print("++++++")}//自定義構造函數init(name : String, age : Int) {self.name = nameself.age = age}init(dict : [String : AnyObject]) {let tempName = dict["name"]//as? 最終會轉換成一個可選類型name = tempName as? Stringlet tempAge = dict["age"]//as! 會轉稱成一個確定的類型,這里有一個強制解包的問題let tempAge1 = tempAge as! Intif tempAge1 != nil {age = tempAge1}if let tempAge = dict["age"] as? Int {age = tempAge}let p = Person()let p1 = Person(name: "marlonxlj", age: 25)print(p1.age) print(p1.name)

屬性監聽器

class Person : NSObject {//屬性監聽器var totalSteps : String? {willSet{print(totalSteps) // print(newValue)}didSet{print(totalSteps) // print(oldValue)}}} let p = Person()p.totalSteps = "marlonxlj" p.totalSteps = "xiaoming"

三、閉包

  • 閉包和OC中的block非常相似
  • OC中的block是匿名的函數
  • swift中的閉包是一個特殊的函數
  • block和閉包都經常用于回調
//閉包賦值 var multipyClouser: (Int, Int) -> IntmultipyClouser = { (a: Int, b: Int) -> Int in return a * b}let result = multipyClouser(4, 2)print("result: \(result)")//閉包函數:完整寫法var multiplyClosureTola = { (a: Int, b: Int) -> Int in a * b}let rest = multiplyClosureTola(3,5) print("mutlip:\(rest)")//函數實例 func opeartionNum(_ a: Int, _ b: Int, operation: (Int, Int) -> Int) -> Int {let restl = operation(a, b)print(restl)return restl }//定義一個閉包 let addClouse = { (a: Int, b: Int) in a + b}opeartionNum(4, 5, operation: addClouse)

閉包循環引用的解決方法:

  • 第一種使用weak來解決:
weak var weakself = self
  • 第二種使用unowned:[unowned self]
    self.view.backgroundColor = UIColor.redColor()
  • 第三種使用 weak self
    self?. view.backgroundColor = UIColor.redColor

尾隨閉包:如果閉包作為方法的最后一個參數,那么閉包可以將()省略掉

  • 1.普通寫法: loadData ({})
  • 2.寫法一: loadData() {}
  • 3.寫法二: loadData {}

四、懶加載

  • 格式
lazy var 變量: 類型 = {創建變量代碼}()
  • 懶加載的使用
//定義了一個array數組的懶加載lazy var array: [String] = {() -> [String] in return ["marlonxlj", "marlon", "marlonxxx"]}()

extension類似OC的category,只能擴充方法,不能擴充屬性

自定義log信息

func MXLog<T>(message:T, fileName: String = #file, funcName: String = #function, lineNum: Int = #line){#if DEBUGlet filePath = (fileName as NSString).lastPathComponentprint("[\(filePath)]:\(funcName):line:\(lineNum)] -- \(message)")#endif}

???如果對你有幫助,或覺得可以。請右上角star一下,這是對我一種鼓勵,讓我知道我寫的東西有人認可,我才會后續不斷的進行完善。

有任何問題或建議請及時issues me,以便我能更快的進行更新修復。

Email: marlonxlj@163.com

轉載于:https://www.cnblogs.com/marlonxlj/p/6444992.html

總結

以上是生活随笔為你收集整理的Swift3.0温习之基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲天天 | 狠狠干一区二区 | 成人黄色激情小说 | 精品免费在线观看 | 亚洲色图狠狠干 | 亚洲第四页 | 少妇又紧又色又爽又刺激 | 韩国av在线播放 | 天天干狠狠插 | av黄网站| 一级免费在线 | 国产av人人夜夜澡人人爽 | 精品人妻在线播放 | 在线成人一区二区 | 东北女人啪啪ⅹxx对白 | 亚洲大片精品 | 青青青国产| 无套爆插 | 网红av在线 | 日日操夜夜操天天操 | 天天干天天上 | 国产探花在线精品一区二区 | 三级视频在线看 | 色狠久| 国产在线观看第一页 | 男女插孔视频 | 中文字幕一本 | 超碰国产在线观看 | 麻豆黄色片 | 午夜视频在线观看一区 | 欧美激情 亚洲 | 天堂中文在线免费观看 | www久久久久久 | 亚洲综合图区 | 国产精品久久777777毛茸茸 | 都市激情校园春色 | 美国免费黄色片 | 青苹果av| 高潮毛片7777777毛片 | 国产精品免费视频一区二区三区 | 美丽姑娘免费观看在线观看 | 免费观看成年人网站 | 葵司ssni-879在线播放 | 手机av资源 | 男人和女人插插 | 国产成人综合av | 日韩一区二区三区电影 | 成年人免费看视频 | 一区二区三区av在线 | 国内视频自拍 | 日韩在线第一区 | 国产在线综合网 | 日韩性插| 台湾佬美性中文网 | 奇米网在线观看 | 小草av在线 | 精品无码一区二区三区的天堂 | 狠狠狠狠狠狠狠干 | 欧美小视频在线 | 卡通动漫亚洲综合 | av免费在线观看不卡 | 激情开心成人网 | 中文高清av| 久久91亚洲精品中文字幕奶水 | 婷婷色一区二区三区 | 亚洲精品久久一区二区三区777 | 人人舔人人 | 九九热中文字幕 | 欧美日韩精品国产 | 国产免费无码一区二区视频 | 91精品国产综合久久久密臀九色 | 国产精品综合一区二区 | 黑人满足娇妻6699xx | 久久久久久综合网 | 97伊人超碰| 蜜桃又黄又粗又爽av免 | 日本久久精品 | 在线成人免费电影 | 国产午夜在线播放 | 国产一区视频在线 | 国产成人精品免费视频 | 天天插天天狠天天透 | 日本色悠悠 | 狠狠干2018| 黄色录象片 | 在线aaa| 国产欧美精品一区二区色综合 | 一色道久久88加勒比一 | 一级黄色片网址 | 欧美成人高清在线 | 17c精品麻豆一区二区免费 | 亚洲精品综合在线 | 国产伦精品一区二区三区免费视频 | 欧美一区 | 娇妻之欲海泛舟无弹窗笔趣阁 | 99re这里只有精品在线观看 | www色网站 | 国产视频手机在线观看 | 干干干日日日 |