基本数据类型
- 导入头文件
import UIKit
- let定义常量 不可改变
let a = 20
print(a)
- 定义变量
var b = 10
- 强制类型转换将 double 类型 c 转换成 int 整形 d
let c = 5.32
let d = Int(c)
- if使用
省略小括号判断句不再有非0/nil即真,必须有确真假true/false
let e = 2
if e > 0 {
print("e大于0")
}else{
print("e小于等于0")
}
- 三目运算符
let a1 = 10
let a2 = 11
let result = a1 > a2 ? a1 : a2
- guard 用法 swift 特有
如果age大于等于18,就往下执行(执行print("留下来")),不看else里面的。如果age小于18,就执行else括号里面的代码(print("回家找妈妈"),然后return)
let age = 20
let money = 10
func online(age : Int, money : Int) {
guard age >= 18 else {
print("回家找妈妈")
return
}
guard money > 0 else {
print("没钱,回家找妈妈")
return
}
print("留下来")
}
online(age, money: money)
- for循环
//基本写法(很少用)
for var i = 0;i < 10; i++ {
print(i)
}
//常规写法
for i in 0 ..< 10 {
print(i)
}
//用_来代替不需要赋值的变量,这样遍历速度也会提高
for _ in 0...9 {
print("我打印了10次")
}
字符串
- 1.定义字符串
let str = "hello world"
- 2.遍历字符串中字符
for c in str.characters {
print(c)
}
- 3.字符串的拼接
- 3.1.字符串之间的拼接
let str1 = "今天天气"
let str2 = "非常好"
// NSString stringwithFormat:@"%@%@", str1, str2]
let result = str1 + str2
- 3.2.字符串和其他标识符之间的拼接
let age = 18
let name = "why"
let height = 1.88
//NSString stringwhithFor
// 拼接其他标识符的格式: \(标识符的名称)
let info = "my name is \(name), age is \(age), height is \(height)"
- 3.3.字符串的格式化:时间显示 (例如02:23)
let min = 3
let second = 04
//let timeStr = "0\(min):0\(second)"
let timeStr = String(format: "%02d:%02d", arguments: [min, second])
- 4.字符串的截取
let urlString = "www.baidu.com"
// 将String类型转成NSString类型 string as NSString
let header = (urlString as NSString).substringToIndex(3)
let middle = (urlString as NSString).substringWithRange(NSRange(location: 4, length: 5))
let footer = (urlString as NSString).substringFromIndex(10)
数组
swift的数组或者字典中,可以存基本数据类型,而不是OC那样存对象
- 1.数组的定义
不可变数组(let)和可变数组(var)
1>不可变数组
let array = ["why", "lmj", "lnj", "yz"]
- 2.可变数组
//String为声明数组中的元素类型
var arrayM = [String]()
- 2.对可变数组的操作(增删改查)
- 2.1.添加元素
arrayM.append("why")
arrayM.append("yz")
arrayM.append("lmj")
arrayM.append("lnj")
- 2.2.删除元素
//这个方法会有返回值,返回你删除的
arrayM.removeAtIndex(0)
//若查看数组,直接
arrayM
- 2.3.修改元素
arrayM[1] = "why"
- 2.4.获取某一个下标值的元素
arrayM[0]
- 3.遍历数组
*******常见*******
for i in 0..<arrayM.count {
print(arrayM[i])
}
for name in arrayM {
print(name)
}
*******不常见*******
for i in 0..<2 {
print(arrayM[i])
}
for name in arrayM[0..<2] {
print(name)
}
- 4.数组的合并
swift中如果两个数组类型是完全一致的,可以相加进行合并
let resultM = arrayM + array
字典
- 1.字典的定义
不可变字典(let)
注意:在swift中无论是数组还是字典都是使用[],但是如果[]中存放的是元素,编译器会认为是一个数组.如果[]中存放的是键值对,编译器会认为是一个字典
let dict = ["name" : "why", "age" : 18, "height" : 1.88]
可变字典(var)
不常用写法
// var dictM = Dictionary<String, AnyObject>()
常用写法
//String为key类型, AnyObject为任意对象,是value类型
var dictM = [String : AnyObject]()
- 2.对可变字典的操作
- 2.1.添加元素
dictM["name"] = "why"
dictM["age"] = 18
- 2.2.删除元素
//name为key,这个方法会有返回值value
dictM.removeValueForKey("name")
- 2.3.修改元素
注意:如果有对应的key,则修改对应的value,如果没有对应的key,则添加对应的键值对
dictM["age"] = 30
- 2.4.获取元素
dictM["weight"]
- 3.遍历字典
3.1.遍历所有的key
for key in dictM.keys {
print(key)
}
3.2.遍历所有的value
for value in dictM.values {
print(value)
}
3.3.遍历所有的key/value
for (key, value) in dictM {
print(key)
print(value)
}
- 4.合并字典
注意:字典即使类型一直也不可以先加合并
let tempDict : [String : AnyObject] = ["phoneNum" : "+86 110", "sex" : "男"]
//先将key,value遍历出,再添加dictM
for (key, value) in tempDict {
dictM[key] = value
}
元祖
swift特有
//这是数组
let userArray = ["why", 18, 1,88]
userArray[0]
//这是字典
let userDict = ["name" : "why", "age" : 18, "height" : 1.88]
userDict["name"]
- 元组的基本写法
let userInfo = ("why", 18, 1.88)
//从该元祖中取值
userInfo.0
userInfo.1
userInfo.2
- // 给每一个元素起别名
//常用写法
let userInfo1 = (name : "why", age : 18, height : 1.88)
userInfo1.name
userInfo1.age
userInfo1.height
//这样取值写法就比上面 userInfo.0 可阅读性强
//
//不常用写法
let (name, age, height) = ("why", 18, 1.88)
//取值,直接写
name
age
height
可选类型
swift特有
类中所有的属性在对象初始化时,必须有初始化值
//Person类 继承 NSObject
class Person : NSObject {
var name : String?
var view : UIView?
}
- 1.定义可选类型
普通定义可选类型的方式
// var name : Optional<String>
//
语法糖(常用)
var name : String?
- 2.给可选类型赋值
name = "why"
- 3.从可选类型中取值
print(name) 这样取出来的打印结果"Optional("why")\n",并不是直接得到"why",需要解包
//
// 从可选类型中取值:可选类型!-->强制解包
print(name!) 这样取出来的打印结果 "why"
注意:如果可选类型中没有值,那么强制解包程序会崩溃
强制解包是非常危险的操作:建议在解包前先判断可选类型中是否有值
if name != nil {
print(name!)
}
- 5.可选绑定
1> 判断name是否有值,如果没有值,则不执行{}.
2> 如果有值,则对可选类型进行解包,并且将解包后的值赋值给前面的常量
if let name = name {
print(name)
}