一. XCGLogger 日志打印
public class Log {
#if DEBUG
static let tag = XCGLogger.Constants.userInfoKeyTags
private static let _log: XCGLogger = XCGLogger(identifier: "iCar", includeDefaultDestinations: true)
#enif
}
log.verbose(“一个详细的消息,通常在处理特定问题时很有用”)
log.debug(“ A debug message ”)
log.info(“一个信息消息,可能有用的为用户在console.app中查找”)
log.warning(“警告信息,可能表示可能的错误”)
log.error(“发生错误,但它可以恢复,只是关于发生了什么的信息”)
log.severe(“发生严重错误,我们现在可能会崩溃”)
二.JXSegmentedView APP分类切换滚动视图
// tab菜单样式
private var segmentDataSource: JXSegmentedTitleDataSource = {
let ds = JXSegmentedTitleDataSource()
ds.itemSpacing = 0
ds.titleNormalColor =
ds.titleNormalFont =
ds.titleSelectedZoomScale = 14.0/13.0
return ds
}()
// 菜单指示器
private lazy var segmentIndicator: JXSegmentedIndicatorImageView = {
let indicator = JXSegmentedIndicatorImageView()
indicator.image = UIImage(named: "xx")
indicator.indicatorWidth = 40
indicator.indicatorHeight = 40
return indicator
}()
// tab菜单
lazy var segmentView: JXSegmentedView = JXSegmentedView().then {
$0.delegate = self
$0.dataSource = segmentDataSource
$0.listContainer = containerView
$0.indicators = [segmentIndicator]
view.addSubview($0)
}
// 页面容器
private lazy var containerView: JXSegmentedListContainerView = JXSegmentedListContainerView(dataSource: self).then {
view.addSubview($0)
}
三. Rxswift 响应式编程框架 MVVM架构。 (ReactiveCocoa类似)
RxSwift是Rx标准API的Swift版本实现,不包含任何iOS相关的内容
RxCocoa则是基于RxSwift给iOS的UI控件扩展了很多Rx特性
pod 'RxSwift', '~> 5.0' pod 'RxCocoa', '~> 5.0'
核心概念
被观察者 - 发出事件 - 订阅者 - 响应事件
observable - event - ObserverType - 闭包subscribe{ in}
如何联系 被观察者和观察者 oneObservable.subscribe(anyObserver)
1.Observable
Observable<T>是一个观察者模式中被观察的对象,相当于一个事件序列,它会异步地产生一系列Event,并发送给它订阅者。
func createObservable() {
let createSequence = Observable<Int>.create { observer -> Disposable in
observer.on(.next(1))
observer.on(.completed)
return Disposables.create()
}
_ = createSequence.subscribe { event in
print(event)
}
}
2.ObserverType 订阅者相关
1.AnyObserver(随便什么东西都能充当AnyObserver这种类型的观察者)
- Binder(一般都是一些UI控件的属性在充当Binder这种类型的观察者)
RxCocoa 在对许多 UI 控件进行扩展时,就利用 Binder 将控件属性变成观查者
addtrssDetailTv.rx.text.asObservable().subscribe(onNext: {
if let currentText = $0 as? String , currentText.isEmpty == false{
descroptionTextViewPlaceholder.isHidden = true
}else{
descroptionTextViewPlaceholder.isHidden = false
}
}).disposed(by: disposeBag)
3.闭包来监听Observable
oneObservable.subscribe { event in
switch event { //事件的不同类型
case .next:
case .error:
case .completed:
}
}
3.监听的释放
let bag = DisposeBag()
4. Subjects 同时充当了Observable和Observer的角色
let subject = PublishSubject<String>()
subject.onNext("A") //不会收到
subject.subscribe(onNext: { element in
print("第1次订阅:", element)
}, onCompleted: {
print("第1次订阅:completed")
}).disposed(by: bag)
subject.onNext("B") //1订阅收到
PublishSubject
当订阅者订阅PublishSubject 时,只会收到订阅后Subject发出的新Event,而不会收到订阅之前发出的旧EventBehaviorSubject
let subject = BehaviorSubject(value: "A")
BehaviorSubject在充当Observable的角色,会向观察者发送观察者监听它之前的最后一个事件 + 观察者监听它之后的事件ReplaySubject
let subject = ReplaySubject<String>.create(bufferSize: 2) //事件缓存数N
会向观察者发送观察者监听它之前缓存的N个事件 + 观察者监听它之后的事件BehaviorRelay(对BehaviorSubject的封装)
会向观察者发送观察者监听它之前的最后一个事件 + 观察者监听它之后的事件
behaviorRelay.accept(2)。//发送事件 -特殊
behaviorRelay.subscribe { event in
print(event) // 3、4、5、6
}.disposed(by: bag)
5.字符集更改 -Observable序列进行一些转换
map take filter zip switchLatest
UIStackView (类似前端flex布局)
布局方式凸显它的优势在于不需要设置排列视图(即子视图)的位置,大小(不是必须的),而是通过自身的排列、分布方式自动完成布局
1.axis:主轴方向
水平和竖直方向
2.alignment:交叉轴排列方式
UIStackViewAlignmentFill, //水平:subView的上下和StackView的上下边距 相等 垂直: subView的左右边距和 StackView的所有相等
UIStackViewAlignmentLeading,//垂直有效 :左对齐
UIStackViewAlignmentTop = UIStackViewAlignmentLeading, // 水平有效 上对齐
UIStackViewAlignmentFirstBaseline,//水平有效,第一行基准线对齐。
UIStackViewAlignmentCenter, //中心基准线对齐 1.水平 高度中点对齐 2.垂直:宽度中点对齐
UIStackViewAlignmentTrailing, //垂直有效,右边界对齐。
UIStackViewAlignmentBottom = UIStackViewAlignmentTrailing,// 水平有效 ,下边界对齐。
UIStackViewAlignmentLastBaseline,//水平有效,最后一行基准线对齐。
3.distrubition:缩放
UIStackViewDistributionFill = 0, //子视图填充满指定方向,优先拉伸第一个控件
UIStackViewDistributionFillEqually, //每个子视图填充大小相等,
UIStackViewDistributionFillProportionally, //根据每个子视图里面内容的尺寸来进行填充操作
UIStackViewDistributionEqualSpacing, //每个子视图之间的间距相等
UIStackViewDistributionEqualCentering, //每个子视图中心直接的间距相等
4. space
间距