1.三目运算符questiion?answer1: answer21. 普通 `1. var a = 13
-
var b = 14
-
if a<b{
-
printf("a小于b")
-
}
-
else{
-
printf("a大于或等于b")
-
}`
-
三目 `1. var c = a<b?a:b复制代码2.控制流1. ## 循环结构 ##
-
【1】for in
-
for a in 0...99{
-
a*2
-
}
-
局限性:只能在区间中遍历,全都是是整型并且只可以一个数一个数的遍历。
-
【2】for
-
for i=0;i<10;i++ {
-
i=i+1
-
}`
-
注意:for循环可以不打小括号,循环体内只有有一句话也要打大括号,i可为小数。
-
【3】repeat-while//至少要执行一次复制代码3.Switch高级用法1. ##switch不仅可以判断单值,也可以判断区间,也可以判断元祖##
-
let score = 80//判断区间
-
switch score {
-
case 0..<70:
-
printf("良好")
-
case 71..<100:
-
printf("优秀")
-
default:
-
printf("错误")
-
} |`` |
源码
会经常看到目录:
docs:一些文档
stdlib:swift源码
lib:c++源码
include:c++头文件
1 Array的分析
① map
② flatMap
③ filter
④ reduce
⑤ compactMap
[最新资料](点击 docs.qq.com/doc/DZXpKSU…)
Optional分析
① map、flatMap
② 等价运算符 ==
可以参考上方的高级运算符
extension Optional where Wrapped: Equatable {
//左边为nil右边为可选类型会进入这里
public static func ==(lhs: _OptionalNilComparisonType, rhs: Wrapped?) -> Bool {
switch rhs {
case .some:
return false
case .none:
return true
}
}
//左边为可选类型右边为nil会进入这里
public static func ==(lhs: Wrapped?, rhs: _OptionalNilComparisonType) -> Bool {
switch lhs {
case .some:
return false
case .none:
return true
}
}
//左右都为可选类型会进入这里(如果有非可选的会被包装成可选的,如:Int->Int?)
//如果两个都为可选类型,进入这个方法的时候会把两个参数包装成?多的那个
public static func ==(lhs: Wrapped?, rhs: Wrapped?) -> Bool {
switch (lhs, rhs) {
case let (l?, r?): //左右都不为nil 解包,将解包后的值赋值给l和r
return l == r //l和r相等就返回true
case (nil, nil): //左右都为nil
return true
default: //其他情况
return false
}
}
}
var age1: Int???? = 20
var age2: Int = 20
print(age1 == age2) //true 都会包装成Int????
var age3: Int? = nil
var age4: Int??? = age3
var age5: Int??? = nil
print(age4 == age5) //false age4和age5不一样,age5盒子里就一个nil,age4盒子里不为nil,装了个age3,age3里面才是nil,所以他们不相等
var age6: Int??? = nil
var age7: Int? = nil
print(age6 == age7) //false 这时候比较的时候会进入default,一个为nil一个不为nil,换个思路,类型不一样肯定不相等啊
项目实战
常用swift第三方库
网络请求
图片下载
JSON访问
JSON-Model转换
Alamofire的request方法可以直接使用,不像以前需要创建实例,这是为什么呢?
因为request是public的,其他模块也可以使用。
如果自己也有request方法,想要使用Alamofire的request方法,就直接Alamofire.request就可以了,所以现在好多第三方库的方法都是直接public的,也不怕重名。
Kingfisher注意事项:
Kingfisher默认不支持webp格式的图片, 需要额外安装KingfisherWebP
pod 'KingfisherWebP'
iconView.kf.setImage(with: URL(string: user.thumb),
options: [.processor(WebPProcessor.default), .cacheSerializer(WebPSerializer.default)])
接下来就是库的导入问题了:
默认情况下,用到哪个库就导入哪个库,这样会增加很多重复的工作量,那怎么样做到全局导入库呢? 新建一个用于swift调用oc桥接文件:targetName-Bridging-Header.h
- 导入系统库:#import <XX/XX.h>
- 导入第三方库(Framework形式):#import <XX/XX-Swift.h>
请多多关注
这是我在哔哩哔哩发的swift闭包的学习视频地址
[iOS逻辑沐沐的个人空间_哔哩哔哩_Bilibili](url)(这是一些进阶的视频,不好请勿喷)
iOS沐辰君的个人空间_哔哩哔哩_Bilibili https://space.bilibili.com/1237846717 (这是些基础的,一些flutter底层的)