首先创建swift工程
创建界面选中Command Line Tool, 点击Next
语言栏选中Swift
接下来就创建完Swift工程了
知识点:
第一部分 基本操作
1. let 表示常量 var 表示变量
2. 字符串的操作
创建一个字符串
let str = "Hello"
2. 1 计算字符串长度(和OC类似,不过没有了消息发送[], 全部使用 . )
str.characters.count
str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
2.2 字符串的大小写
print(str.uppercaseString)
print(str.lowercaseString)
2.3 字符串的拼接
第一种方法:
print("123\(str)4555")
第二种方法:
let str2 = String(format: "%02d:%02d", 1, 2)
print(str2)
第三种方法
let str3 = String(format: "%02d--%02d", arguments: [1,2])
print(str3)
2.4 字符串的其他操作全部转换为NSString再去操作
let str4:NSString = str2 as NSString
3. 数组 Array (和OC里面的数组可以相互转换)
3.1 不可变数组
// 不可变数组
let array1 = ["A", "2", "3", "4"]
// initWith/init在swift里面全部转化成()
let array2 = [String]()
3.2 可变数组
3.2.1 创建可变数组
var mutableArray = [String]()
3.2.2 添加元素 使用append
mutableArray.append("Hello")
mutableArray.append("world")
3.2.3 Swift中打印使用 print(),并且所有代码后面不需要加;
print(mutableArray)
3.2.4 数组移除元素
mutableArray.removeAtIndex(1)
3.3 数组遍历
3.3.1
// 元素个数.count
// 数组的遍历 for-in(明确指出数组里元素的类型)
for temp in array1 as [String]{
print(temp)
}
3.3.2
// 元组遍历
for (index, value) in array1.enumerate()
{
print("index = \(index), value = \(value)")
}
4. 字典
4.1 不可变字典
4.1.1 创建字典
let dict = ["key1" : "value1", "key2" : "value2", "key3" : "value3"]
print(dict)
4.1.2 通过key值访问value值 (和OC一样)
print(dict["key2"])
4.2 可变字典
4.2.1 创建可变字典
var dict3 = ["key" : "value"]
4.2.3 (合并)
for (tempKey, tempValue) in dict{
// 如果key存在的则是一个更新键值对操作,不存在则是一个增加键值对操作
dict3[tempKey] = tempValue
}
print(dict3)
4.3 字典遍历
// for - in 遍历
for (key, value) in dict
{
print("key = \(key), value = \(value)")
}
5. ? 与 ! 的作用与区别
// 如果一个值可能为nil,那么这个值就是可选类型,用?标识
// Optional包围的就是一个可选类型
// 可选类型不能直接使用,必须强制解包 !强制解包,对nil强制解包会造成Crash
常见的错误:
// fatal error: unexpectedly found nil while unwrapping an Optional value 对一个空的可选类型进行强制解包
举例:
var a1:String?
a1 = "12345";
print(a1 ?? "234".characters.count)
// 如果a1为nil 赋值234 如果有值 为a1原来的值
6. 条件语句
6.1 if 语句
6.1.1 if语句在Swift中和OC中的区别
// if 条件语句()可以省略 {}不能省略
// if 没有非零即真的概念
6.1.2 举例
let tempValue = 10
if tempValue > 5 {
print("tempValue > 5")
}
6.2 可选类型的条件分支
6.2.1 if-let 是对可选类型的判断,如果可选类型为空,则不执行代码块,如果不为空则用tempStr来接受此刻这个可选类型的解包后的值
let str:String? = "hello"
if let tempStr = str {
print(tempStr)
}
6.2.2 if-let-where 跟if-let相似,where是对前面定义的这个局部变量再做一层判断
if let tempStr = str where tempStr.characters.count > 2{
print("tempStr.length = \(tempStr.characters.count)")
}
6.2.3 guard-let-else(守护) 如果可选类型str为nil,则执行code代码块,最后一定要return,如果不为nil则强制解包后的值赋值给tempStr,这样{}外面就可以使用tempStr
guard let tempStr = str else {
print("为nil")
return
}
6.3 switch
6.3.1 Swift 和 OC的区别
// switch 不局限判断整形,可以使浮点型,也可以是字符串。。。
// switch 后面的小括号可以省略,大括号不能省略 case后面至少要有一条直行语句!!!并且case后面的大括号可以省略,break可以不写,不造成贯穿 default一定要写,并且只能写在最后
6.3.2 举例
let f = 3.2
switch f {
case 3.0:
print("===3.0")
case 3.1:
print("===3.1")
case 3.2:
print("===3.2")
default:
print("unknown")
}
7. 循环语句
7.1 第一种
for var i = 0; i < 5; i += 1 {
print(i)
}
7.2 第二种
for i in 0 ..< 5 {
print(i)
}
8. 枚举
8.1 注意点
// 枚举(枚举值可以关联浮点,字符串, 没有默认的关联值)
// 关联如果是Int,会默认的递增上去,如果不是Int,必须每个枚举值都关联上对应的值
// 如果明确指出一个变量/常量是属于那种枚举类型的话,可以直接用枚举值赋值,否则就 枚举类型.枚举值
8.2 举例
enum Month:Int {
case January
case February
case March
case April
}
let month:Month = .January
var month1 = Month.January
month1 = .February
8.3 在switch中的应用
switch month{
case .January:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .February:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .March:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .April:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
}
第二部分 在iOS工程中的操作
创建步骤 1.
选中iOS下Application的Single View Application 点击Next
选择Swift语言 创建工程
知识点:
1. 懒加载
1.1 格式
/*
lazy var 变量名:变量类型 = {
code
return
}()
*/
1.2 使用
view.addSubview(btn)
1.2 实例
lazy var btn:UIButton = {
var temBtn = UIButton(type: .ContactAdd)
temBtn.frame = CGRectMake(90, 100, 50, 50)
temBtn.backgroundColor = UIColor.cyanColor()
return temBtn
}()
2. 闭包
2.1 格式
var 闭包变量 ={
(参数名:参数类型)-> 返回值类型 in
代码块
}
2.2 种类
2.2.1 无参无返
let closure = {
() -> ()
in
print("无参无返")
}
closure()
2.2.2 有参无返
let closure1 = {
(tempStr1 str:String,tempStr2 str1:String) -> Void
in
print("有参无返\(str),\(str1)")
}
closure1(tempStr1 : "hello", tempStr2 : "world")
2.2.3 无参有返
let closure2 = {
() -> String
in
print("无参有返")
return "无参有返"
}
print(closure2())
2.2.4 有参有返
let closure1 = {
(tempStr1 str:String,tempStr2 str1:String) -> String
in
return tempStr2
}
print(closure1(tempStr1 : "hello", tempStr2 : "world"))
3. 函数
3.1 四种格式
func a () -> Void {
print("无参无返")
}
func b () -> String {
return "无参有返"
}
// 有参无返
func c (str : String) -> Void {
print("\(str)")
}
// 有参有返
func d (str : String) -> String {
return str
}
3.2 函数 和 闭包 的综合使用
3.2.1 需求 : 输入两个字符串,输入一个闭包(将刚才输入的两个字符串当做参数,并且返回一个拼接好的新的字符串)
func combineString(str1:String, str2:String, closure:(tempStr1:String, tempStr2:String) -> String){
// 执行闭包
let string = closure(tempStr1: str1, tempStr2: str2)
print(string)
}
3.2.2 使用:在viewDidLoad中调用
combineString("hello", str2: "world") { (tempStr1, tempStr2) -> String in
return "\(tempStr1) \(tempStr2)"
}
3.2.3 需求 :定义一个方法 (输入参数color,frame,closure)(是将刚才的color,frame当做参数,返回一个UIView),返回UIView
func createView(color:UIColor, frame:CGRect, closure:(tempColor:UIColor, tempFrame:CGRect) -> UIView) -> UIView {
let view = closure(tempColor: color, tempFrame: frame)
return view
}
3.2.4 使用
let view1:UIView = createView(UIColor.redColor(), frame: CGRectMake(0, 0, 375, 667)) { (tempColor, tempFrame) -> UIView in
let view = UIView()
view.backgroundColor = tempColor
view.frame = tempFrame
return view
}
view.addSubview(view1)
// swift里面不写self,一般只有在闭包内部才会强制要求写self
4. 异常捕获
解析Json文件
let path = NSBundle.mainBundle().pathForResource("iOS04", ofType: "json")
let data:NSData = NSData(contentsOfFile: path!)!
do {
let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as! [[String : String]]
print(rootArray)
} catch {
// 异常捕获 序列化出错自动来这儿
print("error")
}
5. 字典录入模型
5.1 创建模型
5.1.1 tips
// 字典转模型,模型中如果有基本数据类型的话,基本数据类型不可以为可选类型,否则在KVC赋值中会找不到对应的key值。如果为可选类型的话应该给初始值
5.1.2 创属性
var name:String?
var age:Int = 0
var gender:String?
5.1.3 重载初始化方法
init(dict:[String:AnyObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
5.1.4 如果自定义了初始化方法并且没有实现系统默认的初始化方法,那么外界访问不到该类的默认初始化方法,想要访问的话必须手动实现
override init() {
super.init()
}
5.2 字典转模型
let dict = ["name":"zhangsan","age":12,"gender":"男"]
let person = Person(dict: dict)
print(person.name)
print(person.age)
print(person.gender)
6. 单例的创建
6.1 创建
创属性
var name:String?
6.1.1 第一种
/*
static var shareSingleDog:SingleDog = {
let instance = SingleDog()
return instance
}()
*/
6.1.2 第二种
static let instance = SingleDog()
static func shareSingleDog() -> SingleDog{
return instance
}
6.2 使用
6.2.1 第一种
let s1 = SingleDog.shareSingleDog
s1.name = "wangqiang"
let s2 = SingleDog.shareSingleDog.name
print(s2)
6.2.2 第二种
let s3 = SingleDog.shareSingleDog()
s3.name = "afbaf"
let s4 = SingleDog.shareSingleDog()
print(s4.name)
分享就到这里,谢谢大家的支持。。。
网友评论