在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文主要记录swift中delegate的使用、“?!”Optional的概念、GCD的使用、request请求、网络加载图片并保存到沙箱、闭包以及桥接。
swift中delegate的使用和objective-c大同小异,简单记录一下: step1:声明 @objc protocol testProtocol:NSObjectProtocol{
@objc optional func testAdd( a:Int, b:Int) -> Int;
}
step2:实例化 class TextFieldViewController: UIViewController ,UITextFieldDelegate{
var delegate:testProtocol!
}
step3:调用delegate响应(此处没有处理delegate为空的情况,因为使用了“?”,当delegate为nil的时候,后面的testAdd不会被执行) // if (self.delegate != nil)&&(self.delegate?.responds(to:#selector(testProtocol.testAdd(a:b:))))!{
step4:其他类遵循并实现协议
class UIBaseViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,testProtocol{
func testAdd( a:Int, b:Int) -> Int{
print(a+b)
return a+b
}
func jump{
let txtVC = TextFieldViewController()
txtVC.delegate = self
self.navigationController?.pushViewController(txtVC, animated: true)
}
}
二、“? !”的使用和含义
详细深层的理解,请Google,百度,下面简单记录使用时的区别
self.navigationController?.pushViewController(txtVC, animated: true)
上面的“?”处理逻辑是,当navigationController为nil时直接不执行后面的push操作,当navigationController存在时执行后面的push操作。 self.navigationController!.pushViewController(txtVC, animated: true)
上面的“!”对UINavigationController?进行了手动解包,也就是说navigationController绝对存在,否则(navigationController为nil)程序就会直接崩溃。
三、GCD使用
1、同步 func dispatch_sync(){
let queue = DispatchQueue(label: "com.test.queuesync")
queue.sync {
for i in 0...10{
print("sync test --- ",i)
}
print(" ---同步执行结束 子线程---")
}
}
2、异步 func dispatch_async(){
let queue = DispatchQueue(label: "com.test.queueasync")
queue.async {
for i in 0...10{
print("async test --- ",i)
}
print(" ---异步执行结束 子线程---")
}
}
3、延时 func dispatch_delay(){
let queue = DispatchQueue(label: "com.test.queuedelay")
queue.asyncAfter(deadline: DispatchTime.now()+DispatchTimeInterval.seconds(3), execute: {
print(" ---延迟执行执行结束 子线程---")
})
}
4、回到主线程 func dispatch_main(){
let queue = DispatchQueue(label: "com.test.backtomain")
queue.async{
DispatchQueue.main.sync {
print(" ---回到主线程---")
}
}
}
5、全局并发队列 func dispatch_global(){
let queue = DispatchQueue.global()
let workItem = DispatchWorkItem{
print("调用了workitem")
}
queue.async {
for i in 0...10{
print("async test --- ",i)
}
workItem.perform();
print(" ---global异步执行结束 子线程---")
}
}
四、request
1、GET请求 func getRequest(){
let url = URL.init(string: "https://api.github.com/repos/alibaba/weex")
let request = NSMutableURLRequest.init(url:url!)
request.httpMethod = "GET"
request.timeoutInterval = 10
// let params = "type=shentong&postid=3333557693903" as NSString
// request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
// request.httpBody = params.data(using: String.Encoding.utf8.rawValue)
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
if (error != nil) {
print(error ?? "")
return
}else {
//此处是具体的解析,具体请移步下面
do{
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print(json)
// let json: Any = try! JSONSerialization.jsonObject(with: data!, options: [])
// print(json)
JYToast.showInMidWindow(title: NSString.init(format: "data is -- \n %@", json as! CVarArg) as String)
}catch{
print(error.localizedDescription)
}
}
}
dataTask.resume()
}
2、POST请求 func postRequest(){
let url = URL.init(string: "http://www.kuaidi100.com/query")
let request = NSMutableURLRequest.init(url:url!)
request.httpMethod = "POST"
request.timeoutInterval = 10
let params = "type=shentong&postid=3333557693903" as NSString
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = params.data(using: String.Encoding.utf8.rawValue)
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
if (error != nil) {
print(error ?? "")
JYToast.showInMidWindow(title: NSString.init(format: "error is -- \n %@", error! as CVarArg) as String)
return
}else {
do{
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print(json)
JYToast.showInMidWindow(title: NSString.init(format: "data is -- \n %@", json as! CVarArg) as String)
}catch{
print(error.localizedDescription)
}
}
}
dataTask.resume()
}
五、加载网络图片并保存到沙箱let queue = DispatchQueue.global();
六、闭包闭包和block类似,有逃逸闭包和非逃逸闭包之分 //起别名
七、桥接文件1、新建header-file 2、如下图导入
3、在文件中加入需要桥接的objective-c的头文件即可 |
请发表评论