程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 關於swift的團體小結

關於swift的團體小結

編輯:更多關於編程

關於swift的團體小結。本站提示廣大學習愛好者:(關於swift的團體小結)文章只能為提供參考,不一定能成為您想要的結果。以下是關於swift的團體小結正文


寫在後面

接觸swift也有段時間了,經過這段時間自己接觸和自創他人的經歷,記載幾點關於swift的小技巧,雖然不是什麼深邃的原理知識,但是在往常的項目中用到或答應以進步開發效率呢

🙃,哈哈,接上去就復雜總結一下:

枚舉(ENUM)

結合一個小場景, 比方我們要做一個關於性別判別的一個小case:
能夠我們首先想到的就是這樣,硬編碼寫入,每次都需求手動輸出

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 中,就會增加不小心輸出錯誤的幾率,而且不在enum范圍中的實例,編輯器也會指出。

空合運算符

比方我們要定義某個label的默許text, 也就是說,假如我們沒有去人為設置,這個label就會用默許text顯示,我們能夠會這麼寫:

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

函數式

比方我們獲取10以內的奇數, 第一想法是,用for循環呀:

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

當然了,必定可以計算出後果,假如換種思緒呢,swift內置filter函數:

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

閉包 \ 函數

舉個栗子,兩個字符串拼接

運用函數:

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 便當初始化

我們聲明一個類,給這個類設置變量然後將其初始化

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這個類的時分,我們想著給這個類中的dog和cat都設置好數量,我們就可以用convenience init來設置

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之後 我們發現 變量的set\get辦法發作改動了有木有,添加了一個很方便的屬性就是willSet和didSet,比方我們假如求一個正方形的周長,運用function的話是這樣子的 :

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

假如我們運用變量的屬性察看辦法:

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

willSet
是在屬性發作改動之前調用的
didSet
是在屬性發作改動之後調用的。

遍歷辦法

打印字符串:假如運用while 來

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

我們必需要定義一個變量來確保打印到達我們要求的次數,但是我們定義越多的變量就意味著出錯的風險越大,所以還是盡量少寫點兒代碼,改成for循環版:

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

不需求我們定義多余變量,由於swift語法設計的時分用_來替代可以疏忽的變量了

計算屬性\ 函數

取圓的直徑和半徑:
1、運用函數:在這種狀況下,我們依據半徑求直徑,依據曾經直徑求半徑,需求寫兩個function

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

2、運用變量的計算屬性

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

我們知道直徑和半徑是互相依存的關系的,運用變量的計算屬性這樣看起來要比運用函數計算要簡約的多了。

泛型

假如我們需求將不同類型數組中的變量打印輸入,我們能夠會這樣做:

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) } }

我們需求定義不同類型的數組,假如類型多了,那我們做的無謂的任務就有點兒多了,這時分我們假如運用泛型來處理這個問題的話:

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

復雜好多 有木有, 泛型是Swift言語弱小的中心,泛型是對類型的籠統,運用泛型開發者可以愈加靈敏方便的表達代碼意圖。有參函數的參數必需有一個明白的參數類型,有些時分開發者會遇到這樣一種狀況,好像下面我們舉的這個例子,由於變量有類型之分,完成相反的功用,能夠需求重載成多個函數來完成,這大大糜費了開發本錢,運用泛型,可以完滿的處理這個問題。

拓展

swift 中沒有了OC中的category 但是保存了extension, 我們和extension打交道的時分也就比擬多了, 假如我們需求計算一個數的平方,我們可以聲明一個函數, 像這樣:

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

那假如我們要求10 的4次方的話,我們就要var s = squ(x: 10)
squ(x: s)創立多余變量。
運用拓展:

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

簡約,不需求多創立變量。

Gaurd let \ if let

檢驗用戶名和密碼:

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的話,順序就會走return辦法,提早完畢運轉, 否則就會print("歡送, \(username)!")

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved