摘要: 作为一个程序员,危机感十分严重,如果只会单一的一种语言,说不定就 Game Over,平时利用时间 学学 Swift ,H5, JAVA
变量与常量
声明常量/变量的方式 let/var name: Type
初始化值的方式 var/let name: Type = initValue
let 关键字用来声明常量,若给定确定的值,不可修改,修改编译报错
var 关键字用来声明变量,开发中最好给个初始值,可以修改
let firtstLet : Int
firtstLet = 2
var firstVar : Int
firstVar = 3
let secondLet : Int = 4
/*
second = 5 报错
*/
var secondVar : Int = 6
secondVar = 7
// 输出
print(firtstLet,firstVar,secondLet,secondVar)
类型推断
Swift 是推荐类型推断的,也就是不需要我们在声明时指定具体的类型,只需要赋值就可以根据值来自动推断出其数据类型;不是所有情况下都可以使用类型推断的,一定是我们知道已经知道其具体类型且我们希望是这种类型的情况下才使用类型推断.
//如: let constant = 10,不需要指定其类型为Int Swift会根据数值 10 推断出其类型为int
let constant = 10
// 反例:let floatValue = 10.0 类型推断floatValue 为 Double 类型,是错误的
let floatValue = 10.0
// 正确写法
let floatValue1 : Float = 10.0
let floatValue2
类型转换
Swift 是强类型语言,比OC还要强,对于类型的转换,永远不会隐式转换,因此在需要类型转换的地方,必须手动添加代码转换
var doubleValue = 110.0
/*
var intValue: Int = doubleValue 报错
*/
// 正确写法
var intValue: Int = Int(doubleValue)
类型别名
使用typealias关键字给一个已经存在的类型指定别名。指定别名后,就可以使用该别名来声明常量或者变量。
typealias AudioSample = Int
var name: Int = 1
// 等价于
var name1: AudioSample = 1;
布尔类型
在Swift中 布尔类型是使用 Bool 其值只有真假,也就是 true false 与 OC语言不同,不是 YES NO
var canTransfer = true
let isSuccessful = false
if canTransfer {
print("d")
} else {
print("g")
}
元组
OC中 没有元组类型,而 Swift 中的 元组类型 跟 OC中的数组,字典类似 ;声明元组类型很简单:()包裹起来,元素的类型可以是任意类型,元组内的元素可以通过 加上 0 1 2来访问,如果有名称 可以直接使用名称获取
let httpError = (404,"http not found")
var httpError1 = (errorCode: 404,errorMessage: "http not found")
print(httpError.1,httpError1.errorCode)
let (statusCode,statusMessage) = httpError
print("The Code is \(statusCode)")
let (StatusCode,_) = httpError
print("\(StatusCode)")
可选项
可选项是个枚举值: nome :没有值, some 是某一类值;
var 的可选值默认为nil
let 没有默认的可选值
- 原始定义
let x : Optional = 10
- 简单定义
“?” 用来定义 y是一个可选的int类型,可能没有值,也可能有一个整数
let y : Int? = 20
- 强解包
不同类型的值 不能直接运算 如果nil 不能参与任何计算 表示 “强行解包” 从可选项中强行获取对应的非空值 如果真的是nil 的话 就崩掉
print(x! + y!)
可选项判断
如果 x, y 不为空 则可以强行解包
print(x! + y!)
?? 简单的三目运算 如果有值 则使用值 没有的话 就使用?? 后面的
print((x ?? 0) + (y ?? 0))
?? 的优先级比较低 使用的时候 加上 ()
let name : String? = "老王"
print((name ?? "") + "你好");
控制流
- if语句 ( 1 , 条件没有 (); 2 ,语句必须要{};)
let x = 10
if x > 5 {
print("大了")
} else {
print("笑了")
}
}
- 三目运算(在swift中 ()表示空执行)
let x = 10
x > 3 ? print("dfa") : ()
- if let / var(不是单纯的判断,是连用;进入分支一定有值)
let Oname : String? = "老王"
let Oage : Int? = 10
// 避免强行解包奔溃,加上原始判断
if Oname != nil && Oage != nil{
print(Oname! + String(Oage!))
}
// if let 进入分支一定有值
if let name = Oname , let age = Oage {
// name age 的作用域仅在 {}里
// 不需要解包
print(name + String(age))
}else{
print("至少有一个空值")
}
- guard let / var 守卫 ( guard let 于 if let 相反 如果没有值返回)
let name : String? = "adfa"
let age : Int? = 10
// 如果没有值直接返回
guard let newname = name , let newage = age else { return}
// 一定有值
print(newname + String(newage))
- Switch
1,OC中 Switch 分支要求必须是整数,而 swift中 可以是任意类
2,swift 中 Switch一般不需要 break
3,swtch 如果要多值,使用,隔开
4,所有的分支至少需要一条指令,如果什么都不执行,才使用break
func demo3(num: NSString) {
switch num {
case "10","8":
print("我是字符串")
default:
print("哈哈")
}
}
for 循环
变量在[0,5) 循环
for i in 0..<5 {
print(i)
}
变量i在 [0,5] 循环
for i in 0...5 {
print(i)
}
反序遍历(关键词reversed())
// 颠倒 翻转
for i in (0..<10).reversed() {
print(i)
}