Swift5類型轉(zhuǎn)換
swift中值永遠(yuǎn)不會(huì)隱式轉(zhuǎn)換為另一種類型碌上。如果需要將值轉(zhuǎn)換為其他類型叠荠,請顯式創(chuàng)建所需類型的實(shí)例.
let value = 12
let str = "age"
let res = str + String(value)
// 錯(cuò)誤寫法 let res = str + value 這種是沒有類型推斷的,甚至于在編寫時(shí)就會(huì)報(bào)錯(cuò) cannot be applied to operands of type 'String' and 'Int'
print(res)
// 結(jié)果: age12
Swift5字符串快速拼接
- 拼接變量或者常量使用: \()
let apples = 5
let appleSummary = "I have \(apples) apples."
print(appleSummary)
// 結(jié)果: I have 5 apples.
\() 也可以用于浮點(diǎn)計(jì)算磅摹,如\(A+B)
- 字符串折行
使用: """
let value = """
Just like "The Shawshank Redemption",
"I guess it comes down to a simple choice: Get busy living, or get busy dying. Busy living, or busy dying."
"""
print(value)
Swift5 if 條件判斷
if語句中條件必須是布爾值或者表達(dá)式,而不是與零或者空的隱式比較。
在OBJC 中渣淤,你可以這樣寫:
NSString *str;
if (str) {
NSLog(str);
}
在swift 中則不行,你可以這樣寫
var str: String
str = "aaa"
str = ""
...// 其他操作
if str.count > 0 {
print(str);
}
Swift5 可選值處理
處理方式很多吉嫩,如if 砂代,switch ,下面介紹一種ios中沒有的 ??,
var str: String? = "aaa"
str = nil
var defaultValue = "bbb"
print(str ?? defaultValue)
其實(shí)它就是個(gè)三目率挣,寫法改變了而已
Swift5至少執(zhí)行一次的repeat while(do-while in objc) 和 while
var a = 2
repeat {
a = 2 * a
print(a)
} while a < 2
// 結(jié)果: 4
var b = 2
while b < 2 {
b = 2 * b
print(b)
}
// 結(jié)果:
Swift5特別方便的元組使用
在objc中方法返回多個(gè)參數(shù)時(shí)刻伊,要么數(shù)組,要么字典,必須得去構(gòu)建個(gè)參數(shù)捶箱,swif使用元組t寫法上則方便很多
override func viewDidLoad() {
super.viewDidLoad()
let result = filter(scores: [1,5,3,7,90,45])
print(result)
//結(jié)果: (min: 1, max: 90, sum: 151)
}
func filter(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
Swift5方法作為參數(shù)智什,方法作為傳參,方法嵌套
這也是OC里面沒有的丁屎,以下方法實(shí)現(xiàn)功能:求 平均年齡:最高學(xué)分荠锭,僅做演示功能需要,實(shí)際肯定不必這樣寫
override func viewDidLoad() {
super.viewDidLoad()
// 年齡數(shù)組
let a:[Float] = [14, 15, 16, 14]
// 學(xué)分?jǐn)?shù)組
let b:[Float] = [80, 90, 96, 88]
let result = setupParam(infoA: a, funcB: dealAge)
print(result(b))
// 結(jié)果: (averageAge: 14.75, averageCredit: 96.0)
}
// 求平均年齡
func dealAge(ages: [Float]) -> Float {
var total:Float = 0.0
for age in ages {
total += age
}
if ages.count > 0 {
return total/Float(ages.count)
}
return 0
}
// 方法作為參數(shù)晨川,方法作為返回值 求 平均年齡:最高學(xué)分
func setupParam(infoA: [Float], funcB: ([Float]) -> Float) -> (([Float]) ->(averageAge: Float, averageCredit: Float)) {
// 平均年齡
let age = funcB(infoA)
// 方法嵌套
func avrage(numbers:[Float]) -> (avAge: Float, avCredit:Float) {
let best = numbers.max() ?? 0
return (age, best)
}
return avrage
}
Swift5枚舉
Swift會(huì)分配從零開始的原始值证九,并每次遞增一,但是您可以通過顯式指定值來更改此行為
enum Poker: Int {
case ace = 1
case two, three, four, five, six, seven, eight, nine, ten
case eleven, twelve, thirteen
func translate() -> String {
switch self {
case .ace:
return "A"
case .eleven:
return "J"
case .twelve:
return "Q"
case .thirteen:
return "K"
default:
return String(self.rawValue)
}
}
}
let value = Poker.ace
print(value.translate())
// 結(jié)果: A
Swift5協(xié)議
使用protocol申報(bào)的協(xié)議共虑,類愧怜,枚舉和結(jié)構(gòu)都可以采用協(xié)議。
protocol MyProtocol {
var param: String { get }
mutating func adjust()
}
class classB: MyProtocol {
var param: String = "MyProtocol"
func adjust() {
param += " description"
print(param)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let a = classB()
a.adjust()
// 結(jié)果:MyProtocol description
}
Swift5類擴(kuò)展
用于extension向現(xiàn)有類型添加功能妈拌,例如新方法和計(jì)算屬性拥坛。
extension ViewController {
var viewDes: String {
return "ViewController des"
}
func printViewDes() -> String {
return "extentions method \(viewDes)"
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let des = printViewDes()
print(self.viewDes, des)
// 結(jié)果 ViewController des extentions method ViewController des
}
}
Swift5錯(cuò)誤處理
先定義一個(gè)代表錯(cuò)誤的枚舉
enum MyError: Error {
case lengthError, tooMuchError, tooLittleError
}
override func viewDidLoad() {
super.viewDidLoad()
let str = "sdsadasdassssssss"
do {
let printerResponse = try checkContent(content: str)
print(printerResponse)
} catch {
print(error)
}
// 結(jié)果:tooMuchError
}
func checkContent(content: String) throws -> String {
if content.count > 10 {
throw MyError.tooMuchError
} else if content.count < 5 && content.count > 0 {
throw MyError.tooLittleError
} else if content.count == 0 {
throw MyError.lengthError
} else {
print("valid");
}
return "checkContent done"
}
Swift5 字符串(String)操作
Swift5 字符(Character)操作
Swift5 數(shù)組(Array)操作
Swift5 字典(Dictionary)操作
Swift5 集合(Set)操作
Swift5 簡單使用
Swift OC動(dòng)態(tài)調(diào)試工具 InjectionIII 使用