- 不讓動畫自動停止方法
- 隱藏界面會讓界面上的動畫消失徙垫。
let anim = CABasicAnimation(keyPath:"transfrom.rotation")
// 設(shè)置結(jié)束后不移除動畫
anim.isRemovedOnCompletion = false
- 判斷文本輸入框不為空格以及空
func spaceStringAndEmptyString() -> Bool{
let str = self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
if str.characters.count == 0{
return true // 為空
}else {
return false // 不為空
}
}
- 顏色轉(zhuǎn)RGB方法
func colorFromARGB(_ value: Int32) -> UIColor {
let alpha = CGFloat(((0xff << 24) & value) >> 24) * 1.0 / 255.0
let red = CGFloat(((0xff << 16) & value) >> 16) * 1.0 / 255.0
let green = CGFloat(((0xff << 8) & value) >> 8) * 1.0 / 255.0
let blue = CGFloat(0xff & value) / 255.0
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
func colorFromRGB(_ value: Int32) -> UIColor {
let red = CGFloat(((0xff << 16) & value) >> 16) * 1.0 / 255.0
let green = CGFloat(((0xff << 8) & value) >> 8) * 1.0 / 255.0
let blue = CGFloat(0xff & value) / 255.0
return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}
func colorFromRGB(_ value: Int32, withAlpha alpha: CGFloat) -> UIColor {
let red = CGFloat(((0xff << 16) & value) >> 16) * 1.0 / 255.0
let green = CGFloat(((0xff << 8) & value) >> 8) * 1.0 / 255.0
let blue = CGFloat(0xff & value) / 255.0
return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}
- 函數(shù)作為返回值
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
print(number)
return 1 + number
}
return addOne
}
var increment = makeIncrementer() // 這里將addOne函數(shù)返回回來
increment(8) // 實際調(diào)用addOne函數(shù)
- 閉包的使用
var numbers = [20, 19, 7, 12]
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
- 關(guān)于swift拋出錯誤與處理
// 錯誤的枚舉
enum PrinterError: Error {
case outOfPaper
case noToner
case onFire
}
func send(job: Int, toPrinter printerName: String) throws -> String {
if printerName == "Never Has Toner" {
// 在這里如果條件成立,拋出錯誤
throw PrinterError.noToner
}
return "Job sent"
}
// 在do中 try可能出錯的函數(shù)密末,如果throw出錯誤救鲤,就在catch中處理錯誤
do {
let printerResponse = try send(job: 1040, toPrinter: "Never Has Toner")
print(printerResponse)
} catch {
print(error)
}
// 也可以用這種方法來try 如果拋出錯誤痘拆,則返回nil氢橙,否者返回函數(shù)返回值
let printerSuccess = try? send(job: 1884, toPrinter: "Mergenthaler")
let printerFailure = try? send(job: 1885, toPrinter: "Never Has Toner")
- 枚舉的高級用法
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
// 設(shè)置枚舉的屬性
let hearts = Suit.Hearts
// 根據(jù)枚舉屬性不同調(diào)用不同方法
let heartsDescription = hearts.simpleDescription()
- 關(guān)于defer
使用
defer代碼塊來表示在函數(shù)返回前叫搁,函數(shù)中最后執(zhí)行的代碼甩鳄。無論函數(shù)是否會拋出錯誤逞度,這段代碼都將執(zhí)行。使用
defer妙啃,可以把函數(shù)調(diào)用之初就要執(zhí)行的代碼和函數(shù)調(diào)用結(jié)束時的掃尾代碼寫在一起档泽,雖然這兩者的執(zhí)行時機截然不同。
var fridgeIsOpen = false
let fridgeContent = ["milk", "eggs", "leftovers"]
func fridgeContains(_ food: String) -> Bool {
fridgeIsOpen = true
defer {
fridgeIsOpen = false
}
let result = fridgeContent.contains(food)
return result
}
fridgeContains("banana")
print(fridgeIsOpen)
- swift中泛型
func repeatItem<Item>(repeating item: Item, numberOfTimes: Int) -> [Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
repeatItem(repeating: "knock", numberOfTimes:4) // 結(jié)果為["knock","knock","knock","knock"]