Swift基础

2019-08-25  本文已影响0人  哈啰于先生

基础

概览

Swift是用来开发 iOS,macOS,watchOS,和 tvOS 应用的语言.
在很多方面与C语言、Objective-C的体验非常类似.

 Swift提供了自己的基本类型,包括Int 、Double、Float、Bool、String
 集合类型包括:Array、Set、Dictionary
 Objective-C没有的高级类型:元组(Tuple)、可选型(Optional)

注:Swift是类型安全的语言。如果代码中需要一个String类型,类型安全可言防止你错误的传入一个Int。类型安全可以帮你尽早的捕捉并修复错误。

常量变量

注:如果你需要用 Swift 预留关键字来命名常量或变量时,用反时针(``)包围关键字。但是请注意避免使用关键字作为名称,除非你必须这么做。

var myVariable = 42
myVariable = 50
let myConstant = 42
var message: String
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"
let `class` = "三年二班"
打印
print(friendlyWelcome)
print("The current value of friendlyWelcome is \(friendlyWelcome)")
注释
// 这是一个注释.
/* 这也是一个注释
但是是多行的. */
分号
let cat = "🐱"; print(cat)
// 打印 "🐱"
类型转换

整型与浮点型数字之间的类型转换必须是显式的

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159, 然后会被 Swift 推导为 Double 类型
别名
typealias Book = UInt16
typealias completeClosure = (Int, Bool)-> Int
//将复杂的闭包用别名代替
元组
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String), 等于 (404, "Not Found")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// 打印 "The status code is 404"
print("The status message is \(statusMessage)")
// 打印 "The status message is Not Found"
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// 打印 "The status code is 404"
print("The status code is \(http404Error.0)")
// 打印 "The status code is 404"
print("The status message is \(http404Error.1)")
// 打印 "The status message is Not Found"
let http200Status = (statusCode: 200, description: "OK")

print("The status code is \(http200Status.statusCode)")
// 打印 "The status code is 200"
print("The status message is \(http200Status.description)")
// 打印 "The status message is OK"
可选类型(optional)

这里有一个关于可选类型如何应对值缺省情况的例子。Swift 的 Int 类型有一个尝试将 String 类型值转换为 Int 类型值的初始化构造器。然而,并不是每个字符串都可以被转换成整型。字符串 "123" 可以被转换成数字 123,但是字符串 "hello, world" 并不能转换成数字。

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推导为 "Int?" 类型 或者 "optional Int"

另一种情况,服务端返回的json数据,某一个字段可以是空的,我们用model去接的时候经常会用到可选型的情况。例如我们可以这样定义我们的model

struct FYOrderModel {
    var orderSn: Int?
    var fromCity: String?
    var toCity: String?
}
可选型的使用

1、使用if判断可选型是否为nil然后结合强制解包的方式

if nil != convertedNumber {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// 打印 "convertedNumber 包含整型值 123."

2、使用可选绑定的方式。

使用可选绑定 optional binding 来判断一个可选类型是否包含值,如果包含就赋给一个临时的常量或者变量使这个值可用。可选绑定可以被用到 if 和 while 语句中,用来检查一个值是否是可选类型, 并且将值提取为一个常量或者变量

if let number = convertedNumber {
    print("\"\(convertedNumber)\" has an integer value of \(number)")
} else {
    print("\"\(convertedNumber)\" could not be converted to an integer")
}

3、强解包的方式(慎用)

有时在一些程序结构中可选项一旦被设定初始值时,就会一直拥有值。在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开,因为他可以很安全的确认每次访问的时候都有值。

使用强制解包的时候,表示程序员对该可选型有值负责,因为一旦值为nil,那就表示程序会crash

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! //要求使用感叹号
上一篇 下一篇

猜你喜欢

热点阅读