日韩性视频-久久久蜜桃-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温习之基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕第18页 | 韩日一级片 | 国产男女在线 | 人妻互换一区二区激情偷拍 | 精品久久久久久亚洲综合网站 | 黄色一级一级 | 好男人在线观看 | r级无码视频在线观看 | 亚洲高清成人 | 娇妻被老王脔到高潮失禁视频 | 国产欧美视频在线播放 | 国产精品--色哟哟 | 国产成人在线观看免费 | 国内自拍在线观看 | 国产精华一区二区三区 | 夜夜嗨av一区二区 | 葵司av在线 | 男女在线视频 | 久久久国产精品成人免费 | 国产99在线 | 久久久久一 | 综合色视频| 已婚少妇美妙人妻系列 | 亚洲一区二区国产 | 自拍视频在线播放 | 国产孕妇孕交大片孕 | 密臀av在线播放 | 伊人影院在线播放 | 一区二区在线视频免费观看 | 天堂在线免费视频 | 91正在播放| 91麻豆精品一二三区在线 | 亚洲成人av一区二区 | 国产精品影片 | 国产精品无码一区二区三区三 | 丰满少妇被猛烈进入一区二区 | 亚洲天堂一区在线 | 97理伦 | 热久久亚洲 | caoporm超碰 | 另类激情综合 | 玖玖在线资源 | 亚洲狼人综合网 | 污网站免费观看 | 亚洲性生活片 | 奇米第四色7777 | 体内精视频xxxxx | 爱逼av| 国产精品久久久久久久成人午夜 | 国产做爰免费视频观看 | 成人国产av一区二区三区 | av毛片在线免费观看 | 神马久久影院 | 日本吃奶摸下激烈网站动漫 | 女生喷水视频 | 理论片在线观看理伦片 | 精品无人国产偷自产在线 | 男女插插网站 | 美女扒开尿口给男人看 | 日本黄色a级片 | 亚洲va韩国va欧美va | 国产精品久久久久久久久久久久久久久 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 亚洲性视频网站 | www插插插无码免费视频网站 | 女女同性女同一区二区三区按摩 | 精品无码av一区二区三区四区 | 中文字幕在线字幕中文 | 国产一区二区三区在线免费观看 | 乱码av| 亚洲aa视频 | 人人射| 欧美在线一卡 | 你懂的在线视频网站 | 欧美色资源 | 肉丝美足丝袜一区二区三区四 | av网子| 天天综合网天天综合色 | 日本999视频| 国产女主播av | 亚洲第8页| 久久人人爽人人爽人人片亚洲 | 国产三级在线观看完整版 | 芒果视频在线观看免费 | 性欧美又大又长又硬 | 日本四虎影院 | 久久精品视频一区二区三区 | 无码人妻aⅴ一区二区三区69岛 | 国产精品久久久久999 | 久久久看片| 久热这里有精品 | 久久久久久久久成人 | 日韩av一二三 | 欧美精品在线观看 | 亚洲一级Av无码毛片久久精品 | jizz一区| 中文在线字幕av | 免费吃奶摸下激烈视频 | 一级片aaa|