欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于swift的個(gè)人小結(jié)

 更新時(shí)間:2016年12月17日 17:18:42   投稿:hebedich  
本文是個(gè)人對于目前學(xué)習(xí)swift的一些心得的匯總,這里分享給大家,希望大家能夠喜歡

寫在前面

接觸swift也有段時(shí)間了,通過這段時(shí)間自己接觸和借鑒別人的經(jīng)驗(yàn),記錄幾點(diǎn)關(guān)于swift的小技巧,雖然不是什么高深的原理知識,但是在平常的項(xiàng)目中用到或許可以提高開發(fā)效率呢

🙃,哈哈,接下來就簡單總結(jié)一下:

枚舉(ENUM)

結(jié)合一個(gè)小場景, 比如我們要做一個(gè)關(guān)于性別判斷的一個(gè)小case:
可能我們首先想到的就是這樣,硬編碼寫入,每次都需要手動(dòng)輸入

var gender = ""
gender = "man"
switch gender {
case "man":
  print("man")
  case "female":
  print("female")
default:
  print("other")
}

但是如果我們利用枚舉來寫的話:

enum Gender {
  case man
  case female
  case other
}
var gType: Gender = .man
switch gType {
case .man:
  print("男性")
case .female:
  print("女性")
case .other:
  print("其他類型")
default:
  print("我也不知道")
}

把需要的類型寫到enum 中,就會(huì)減少不小心輸入錯(cuò)誤的幾率,而且不在enum范圍中的實(shí)例,編輯器也會(huì)指出。

空合運(yùn)算符

比如我們要定義某個(gè)label的默認(rèn)text, 也就是說,如果我們沒有去人為設(shè)置,這個(gè)label就會(huì)用默認(rèn)text顯示,我們可能會(huì)這么寫:

var customText: String?
var defaultText = "您好"
var textToUse = ""
if let text = customText {
  textToUse = text
} else {
  textToUse = defaultText
}

如果換種簡單的寫法就成了這樣:

var customText: String?
var defaultText = "您好"
var textToUse = ""
var textToUse = customText ?? defaultText

?? 的意思就是如果textToUse為nil則選擇defaultText 否則選擇customText

函數(shù)式

比如我們獲取10以內(nèi)的奇數(shù), 第一想法是,用for循環(huán)呀:

var arr = [Int]()
for i in 1...10 {
  if i % 2 == 1 {
    arr.append(i)
  }
}
print(arr)

當(dāng)然了,必然可以計(jì)算出結(jié)果,如果換種思路呢,swift內(nèi)置filter函數(shù):

var arr = (1...10).filter { (num) -> Bool in
  num % 2 == 1
}
print(arr)

閉包 \ 函數(shù)

舉個(gè)栗子,兩個(gè)字符串拼接

使用函數(shù):

func sum(a: String, b: String) -> String {
  return a + b
}
var result = sum(a: "你好", b:"哈哈哈")

如果使用閉包的話:

var sumStringClosure: (String, String) -> String = {
  $0 + $1
}
sumStringClosure("hello", "world")

有木有感覺easy了好多

convenience init 便利初始化

我們聲明一個(gè)類,給這個(gè)類設(shè)置變量然后將其初始化

class Animal {
  var dog: Int?
  var cat: Int?
  init(dog: Int, cat: Int) {
    self.dog = dog
    self.cat = dog
  }
}
var daDi = Animal(dag: 2, cat: 4)
daDi.dog
daDi.cat

假如我們想在每次用到 Animal這個(gè)類的時(shí)候,我們想著給這個(gè)類中的dog和cat都設(shè)置好數(shù)量,我們就可以用convenience init來設(shè)置

class Animal {
  var dog: Int?
  var cat: Int?
  init(dog: Int, cat: Int) {
    self.dog = dog
    self.cat = dog
  }
  convenience init() {
    self.init(dog: 10, cat: 10)
  }
}

var daDi = Animal()
daDi.dog
daDi.cat

屬性觀察

自從swift更新到swift3之后 我們發(fā)現(xiàn) 變量的set\get方法發(fā)生改變了有木有,添加了一個(gè)很方便的屬性就是willSet和didSet,比如我們?nèi)绻笠粋€(gè)正方形的周長,使用function的話是這樣子的 :

var length :Double?
func getDiameter(length: Double) -> Double {
  return length * 4
}
getDiameter(length: 10)

如果我們使用變量的屬性觀察方法:

var perimeter: Double?
var length: Double? {
willSet {
  print("準(zhǔn)備賦值中")
}
didSet {
  perimeter = length! * 4
}
}
length = 20
perimeter

willSet
是在屬性發(fā)生改變之前調(diào)用的
didSet
是在屬性發(fā)生改變之后調(diào)用的。

遍歷方法

打印字符串:如果使用while 來

var i = 0
while i < 5 {
  print("irembeu")
  i += 1
}

我們必須要定義一個(gè)變量來確保打印達(dá)到我們要求的次數(shù),但是我們定義越多的變量就意味著出錯(cuò)的風(fēng)險(xiǎn)越大,所以還是盡量少寫點(diǎn)兒代碼,改成for循環(huán)版:

for _ in 1...10 {
  print("itembeu")
}

不需要我們定義多余變量,因?yàn)閟wift語法設(shè)計(jì)的時(shí)候用_來代替可以忽略的變量了

計(jì)算屬性\ 函數(shù)

取圓的直徑和半徑:
1、使用函數(shù):在這種情況下,我們根據(jù)半徑求直徑,根據(jù)已經(jīng)直徑求半徑,需要寫兩個(gè)function

func getDiameter(radius: Double) -> Double { return radius * 2}
func getRadius(diameter: Double) -> Double { return diameter / 2}
getDiameter(radius: 20)
getRadius(diameter: 100)

2、使用變量的計(jì)算屬性

var radius: Double = 10
var diameter: Double {
  get {
    return radius * 2
    }
  set {
    radius = newValue / 2
    }
}
radius // 20
diameter // 40
diameter = 600
radius // 300

我們知道直徑和半徑是相互依存的關(guān)系的,使用變量的計(jì)算屬性這樣看起來要比使用函數(shù)計(jì)算要簡潔的多了。

泛型

如果我們需要將不同類型數(shù)組中的變量打印輸出,我們可能會(huì)這樣做:

var stringArr = ["騎士", "湖人", "公牛"]
var intArr = [1, 3, 4, 5, 6]
var doubleArr = [1.0, 2.0, 3.0]
func printStringArr(a: [String]) { for s in a { print(s) } }
func printIntArr(a: [Int]) { for i in a { print(i) } }
func printDoubleArr(a: [Double]) {for d in a { print(d) } }

我們需要定義不同類型的數(shù)組,如果類型多了,那我們做的無謂的工作就有點(diǎn)兒多了,這時(shí)候我們?nèi)绻褂梅盒蛠斫鉀Q這個(gè)問題的話:

func printElementFromArr<T>(elements: [T]) {
  for e in elements {
    print(e)
  }
}
printElementFromArr(elements: [1,2,3,4])

簡單好多 有木有, 泛型是Swift語言強(qiáng)大的核心,泛型是對類型的抽象,使用泛型開發(fā)者可以更加靈活方便的表達(dá)代碼意圖。有參函數(shù)的參數(shù)必須有一個(gè)明確的參數(shù)類型,有些時(shí)候開發(fā)者會(huì)遇到這樣一種情況,就像上面我們舉的這個(gè)例子,由于變量有類型之分,實(shí)現(xiàn)相同的功能,可能需要重載成多個(gè)函數(shù)來實(shí)現(xiàn),這大大浪費(fèi)了開發(fā)成本,使用泛型,可以完美的解決這個(gè)問題。

拓展

swift 中沒有了OC中的category 但是保留了extension, 我們和extension打交道的時(shí)候也就比較多了, 如果我們需要計(jì)算一個(gè)數(shù)的平方,我們可以聲明一個(gè)函數(shù), 像這樣:

func squ(x: Int) -> Int {
  return x * x
}
var s = squ(x: 10)

那如果我們要求10 的4次方的話,我們就要var s = squ(x: 10)
squ(x: s)創(chuàng)建多余變量。
使用拓展:

extension Int {
  var squ: Int {
    return self * self
  }
}
10.squ
10.squ.squ

簡潔,不需要多創(chuàng)建變量。

Gaurd let \ if let

檢驗(yàn)用戶名和密碼:

1、使用if let, 我們需要一層層的嵌套

var uName: Double?
var uPassword: Double?
func userLogIn() {
  if let username = uName {
    if let password = uPassword {
      print("歡迎, \(username)"!)
    }
  }
}

2、使用gaurd let, 如果uName或者uPassword為nil的話,程序就會(huì)走return方法,提前結(jié)束運(yùn)行, 否則就會(huì)print("歡迎, \(username)!")

var uName: Double?
var uPassword: Double?
func userLogIn() {
   guard let username = uName, let password = uPassword 
     else { return } 
    print("歡迎, \(username)!") 
}

相關(guān)文章

  • 程序遷移到swift 3.0的一些實(shí)用技巧

    程序遷移到swift 3.0的一些實(shí)用技巧

    Swift項(xiàng)目為適配iOS10,無奈只能更新Xcode 8 ,可是發(fā)現(xiàn)一入3.0深似海,從此幸福是路人。于是邊摸索邊修改,終于完成了代碼遷移。節(jié)后在完成手頭工作后,整理思路把Swift3.0遷移的一些實(shí)用技巧分享大家,需要的朋友可以參考下。
    2017-03-03
  • Swift 常量與變量實(shí)例詳解

    Swift 常量與變量實(shí)例詳解

    這篇文章主要介紹了Swift 常量與變量實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Swift中的訪問控制和protected

    Swift中的訪問控制和protected

    這篇文章主要介紹了Swift中的訪問控制和protected,本文主要講解為什么Swift沒有類似protected的選項(xiàng),需要的朋友可以參考下
    2015-05-05
  • Swift中的可變參數(shù)函數(shù)介紹

    Swift中的可變參數(shù)函數(shù)介紹

    這篇文章主要介紹了Swift中的可變參數(shù)函數(shù)介紹,本文實(shí)現(xiàn)了和Objective-C調(diào)用方法一樣的變參數(shù)函數(shù),需要的朋友可以參考下
    2015-01-01
  • Swift教程之函數(shù)詳解

    Swift教程之函數(shù)詳解

    這篇文章主要介紹了Swift教程之函數(shù)詳解,本文講解了函數(shù)的聲明與調(diào)用、函數(shù)的參數(shù)和返回值、函數(shù)參數(shù)名、函數(shù)類型等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    懸浮操作按鈕(Floating Action Button, FAB)是一種在 Android 和 Material Design 中使用的 UI 元素,它用于觸發(fā)特定屏幕的主要操作,下面我們就來詳細(xì)介紹一下如何在SwiftUI中創(chuàng)建懸浮操作按鈕,需要的朋友可以參考下
    2023-10-10
  • 判斷?ScrollView List?是否正在滾動(dòng)詳解

    判斷?ScrollView List?是否正在滾動(dòng)詳解

    這篇文章主要為大家介紹了判斷?ScrollView、List?是否正在滾動(dòng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift自定義UITableViewCell背景色

    Swift自定義UITableViewCell背景色

    這篇文章主要為大家詳細(xì)介紹了Swift自定義UITableViewCell背景色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift中的Access Control權(quán)限控制介紹

    Swift中的Access Control權(quán)限控制介紹

    這篇文章主要介紹了Swift中的Access Control權(quán)限控制介紹,本文講解了private、internal、public三個(gè)關(guān)鍵字的使用,需要的朋友可以參考下
    2015-05-05
  • Swift的函數(shù)式編程詳解

    Swift的函數(shù)式編程詳解

    這篇文章主要介紹了Swift的函數(shù)式編程詳解,本文講解了Swift概覽、Swift遞歸、Swift 的高階函數(shù)和閉包等內(nèi)容,需要的朋友可以參考下
    2015-01-01

最新評論