- 声明常量和变量
let maxNum = 1000 // 声明常量
//maxNum = 1001 // 不可变
var index = 2 // 声明变量
index = 3 // 可变
var x = 1, y = 2, z = 3 // 同时声明多个值, 逗号分隔
// Type inference 自动判断值的类型, 固定为初值类型
//x = "hello"
var s = "hello"
let website: String = "www.imooc.com" // 显式声明类型
var a, b, c: Double // 同时显式声明多个变量
- 整形
var imInt: Int = 80
Int.max
Int.min
//imInt = 99999999999999999999 编译时报错
var imUIntf: UInt = 80
UInt.max // 无符号整形, 不能存储负数
UInt.min // 最小是0,
Int8.max
Int8.min
UInt8.max
UInt8.min
Int16.max
Int16.min
UInt16.max
UInt16.min
Int32.max
Int32.min
UInt32.max
UInt32.min
Int64.max
Int64.min
UInt64.max
UInt64.min
let decimalInt: Int = 17 // 十进制
let binaryInt: Int = 0b10001 // 二进制
let octalInt: Int = 0o21 // 八进制
let hexInt: Int = 0x11 // 十六进制
let bigNum1 = 1_000_000 // 下划线分隔大数字, 自由分隔位置
let bigNmu2 = 1_00_0000 //
/* 浮点数,小数 */
let imFlouat: Float = 3.1415926 // 3.141593
let imDouble: Double = 3.1415926 // 3.1415926
let x = 3.1415926 // 自动判定类型为 Double
var a = 1.25e10 // 1.25 乘以 10 个 10
var b = 1.25e-8 // 1.25 除以 8 个 10
var c = 1_000_000.000_000_1 // 下划线分隔, 增强可读性
/* 类型转换 */
let x: UInt16 = 100
let y: UInt8 = 20
//x + y 不支持隐式类型转换, 只能显式转换, 要求严格, 规避错误
let m = x + UInt16(y)
let w:Float = 3 // 3为浮点数, 但未自动转换类型
//let v:Int = 3.0 // 3.0判断为浮点数, 不能赋值给Int值 v
let v:Int = Int(3.0)
/* 布尔类型 简单if */
let imTrue:Bool = true
let imFalse = false
let a = 1
if imTrue {
print("I'm true")
}else{
print("I'm false")
}
if 1{ // 报错, 1 不在作为true被执行, 对比其他语言1=true, false=0, 'Int' is not convertible to 'Bool'
print("执行")
}
/* Touple 元祖 */
// 将任意个不同的值集合成一个数据, 不同的值可以是不同类型, 小括号中书写数据
var point = ( 5 , 2)
var ( x , y) = point
x // 访问元祖的值, 方式1
point.0 // 访问元祖的值 方式2
var httpResponse:(Int , String) = (404 , "Not Found!") // 显式声明元祖数据
let point2:(x: Int, y:Int ) = (3 , 2) // 声明元祖 指定名称1
let point3 = (x: 3 , y: 2) // 声明元祖 指定名称2
let (_ , httpResult) = httpResponse // 使用下划线忽略元祖其他值
httpResult
/* 命名方式 = 首字母大写, 对齐方式 = 名称+类型+值 各自对齐 */
let imInt: Int = 3
let imFloat: Float = 3.14
let imDouble: Double = 3.1415926
let imBool: Bool = true
let imString: String = "Hello, Swift:)"
var 名字 = "wangpl" // 常量, 变量名字非常开放, uicode编码都可以
print("我的名字是" + 名字)
var 😀 = "smile"
print(名字 + 😀)
/* print输出方式 */
let x = 1, y = 2, z = 3 , b = true
print(x,y,z, b) // 输出不同值时, 自带空格分隔符和尾换行
print(x , y , z , separator:",") // separator表示重置/替换 输出不同值时替换的分隔符
print(x , y , z , terminator:":)") // separator表示重置/替换 尾换行
print("\(y) * \(z) = \(y*z)") // 双引号里插入 \() ,表示将相应的值 放在该位置
/* 可选类型 */
let possilebNumber = "123"
let convertedNumber = Int(possilebNumber) // 尝试将一个 String 转换成 Int, 此时 convertedNumber 的类型是可选类型 Int?
// nil Swift 中是一个确定的值,用来表示值缺失, 任何类型的可选状态都可以被设置为 nil,不只是对象类型。
// OC 中, nil是一个空指针, 指向不存在对象的指针
var serverResponseCocde: Int? = 404
serverResponseCocde = nil
var a = 10 // 声明一个Int a, 后赋值 nil , 报错 Nil cannot be assigned to type 'Int'
//a = nil
var b: String? // 此时 b 的值自动设为 nil
// if 语句及强制解析
if convertedNumber != nil { // 如果可选类型有值, 它将不等于 nil
print("convertedNumber有值") // 输出 有值
}
// 强制解析: 当确定可选类型有值时, 可以在可选类型名字后面加一个感叹号 ! 来获取值, 这个惊叹号表示"我知道这个可选有值, 请使用它"
if convertedNumber != nil {
print("\(convertedNumber!)") // 输出 123
}
// 可选绑定 (optional binding), 用来判断可选类型是否包含值, 如果包含就把值赋给一个临时常量/变量,
// 可选绑定可以用在if 和 while语句中, 这条语句不仅可以用来判断可选类型中是否有值, 同时可以将可选类型中的值赋给一个常量或者变量
if let actualNumber = Int(possilebNumber) {
actualNumber // 值为 123
}else{
print("无")
}
// 你可以包含多个可选绑定或多个布尔条件在一个 if 语句中, 只要使用逗号分开就行. 只要有任意一个可选绑定的值为 nil, 或者任意一个布尔条件为false, 则真个 if 条件判断为false, 这时你就需要使用嵌套if条件语句来处理, 如下所示
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100{
print("\(firstNumber) < \(secondNumber) < 100") // 输出
}
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
}
}
// 输出 "4 < 42 < 100"
// 隐式解析 , 自动解析可选类型
let str1: String? = "An optional string"
let str2: String = str1! // 需要感叹号来获取值
let str3: String! = "An implicitly unwrapped optional string"
let str4: String = str3 // 不需要感叹号
// 如果一个变量可能变成 nil 的话, 请不要使用隐式解析可选类型
网友评论