Swift实战技巧
从OC转战到Swift,差别还是蛮大的,本文记录了我再从OC转到Swift开发过程中遇到的一些问题,然后把我遇到的这些问题记录形成文章,大体上是一些Swift语言下面的一些技巧,希望对有需要的人有帮助
- OC调用方法的处理
给OC调用的方法需要添加@objc
标记,一般的action-target的处理方法,通知的处理方法等需要添加@objc标记
@objc func onRefresh(){
self.refreshCallback?()
}
- 处理SEL选择子
使用方法型如 #selector(方法名称)
eg.
`#selector(self.onRefresh))`
更加详细的介绍可以看这篇文章: http://swifter.tips/selector/
下面是使用MJRefresh给mj_header
和mj_footer
添加回调处理函数的例子
self.mj_header.setRefreshingTarget(self, refreshingAction: #selector(self.onRefresh))
self.mj_footer.setRefreshingTarget(self, refreshingAction: #selector(self.onLoadMore))
try
关键字的使用
可能发生异常的方法使用try?方法进行可选捕获异常
let jsonStr=try?String(contentsOfFile: jsonPath!)
- 类对象参数和类对象的参数值
AnyClass作为方法的形参,类名称.self(modelClass.self)作为实参
func registerCellNib(nib:UINib,modelClass:AnyClass){
self.register(nib, forCellReuseIdentifier: String(describing:modelClass.self))
}
...
self.tableView?.registerCellNib(nib: R.nib.gameCell(), modelClass: GameModel.self)
- 线程间调用
主线程使用DispatchQueue.main
,全局的子线程使用DispatchQueue.global()
,方法可以使用sync
,async
,asyncAfter
等等
下面是网络请求线程间调用的例子
let _ = URLSession.shared.dataTask(with: url, completionHandler: { [weak self] (data, response, error) in
guard let weakSelf = self else {
return
}
if error == nil {
if let json = try? JSONSerialization.jsonObject(with: data!, options: .mutableContainers) {
let data = json