Swift5類型轉換
swift中值永遠不會隱式轉換為另一種類型。如果需要將值轉換為其他類型,請顯式創建所需類型的實例.
let value = 12
let str = "age"
let res = str + String(value)
// 錯誤寫法 let res = str + value 這種是沒有類型推斷的,甚至于在編寫時就會報錯 cannot be applied to operands of type 'String' and 'Int'
print(res)
// 結果: age12
Swift5字符串快速拼接
- 拼接變量或者常量使用: \()
let apples = 5
let appleSummary = "I have \(apples) apples."
print(appleSummary)
// 結果: I have 5 apples.
\() 也可以用于浮點計算,如\(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語句中條件必須是布爾值或者表達式,而不是與零或者空的隱式比較。
在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)
其實它就是個三目,寫法改變了而已
Swift5至少執行一次的repeat while(do-while in objc) 和 while
var a = 2
repeat {
a = 2 * a
print(a)
} while a < 2
// 結果: 4
var b = 2
while b < 2 {
b = 2 * b
print(b)
}
// 結果:
Swift5特別方便的元組使用
在objc中方法返回多個參數時,要么數組,要么字典,必須得去構建個參數,swif使用元組t寫法上則方便很多
override func viewDidLoad() {
super.viewDidLoad()
let result = filter(scores: [1,5,3,7,90,45])
print(result)
//結果: (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方法作為參數,方法作為傳參,方法嵌套
這也是OC里面沒有的,以下方法實現功能:求 平均年齡:最高學分,僅做演示功能需要,實際肯定不必這樣寫
override func viewDidLoad() {
super.viewDidLoad()
// 年齡數組
let a:[Float] = [14, 15, 16, 14]
// 學分數組
let b:[Float] = [80, 90, 96, 88]
let result = setupParam(infoA: a, funcB: dealAge)
print(result(b))
// 結果: (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
}
// 方法作為參數,方法作為返回值 求 平均年齡:最高學分
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會分配從零開始的原始值,并每次遞增一,但是您可以通過顯式指定值來更改此行為
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())
// 結果: A
Swift5協議
使用protocol申報的協議,類,枚舉和結構都可以采用協議。
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()
// 結果:MyProtocol description
}
Swift5類擴展
用于extension向現有類型添加功能,例如新方法和計算屬性。
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)
// 結果 ViewController des extentions method ViewController des
}
}
Swift5錯誤處理
先定義一個代表錯誤的枚舉
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)
}
// 結果: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 數組(Array)操作
Swift5 字典(Dictionary)操作
Swift5 集合(Set)操作
Swift5 簡單使用
Swift OC動態調試工具 InjectionIII 使用