您的位置:首页 > 移动开发 > IOS开发

xcode7 ios9 iOS中设计模式中委托模式(同一工作空间不同工程)异步调用

2016-06-14 00:00 501 查看
基于委托模式实现的分层架构设计图

云服务层——> 数据持久层(提供DAO对象和DAODelegate协议,使用MKNetworkKit/回调MKNetworkKit委托对象)——>业务逻辑层(提供BL对象和BLDelegate协议,实现DAODelegate协议/回调DAO委托对象)——>表示层(实现BLDelegate协议/回调BL委托对象)

类图

1、数据持久层

NoteDAO

//用来保存委托对象的属性

public var delegate:NoteDAODelegate!

// 查询所有数据的方法

// 查询所有数据的方法

public func findAll(){

let host = MKNetworkHost(hostName: HOST_NAME)

var param = [NSObject:NSObject]()

param["userName"] = USERNAME

param["passWord"] = PASSWRORD

let request = host.requestWithPath(HOST_PATH, params: param, httpMethod: "POST")

request.addCompletionHandler { (networkRequest:MKNetworkRequest!) in

let str = networkRequest.responseAsString

if str != nil || str != ""{

self.delegate.findAllFinished(str)

}else{

let err = NSError(domain: "DAO", code: 3, userInfo: [3:NSLocalizedDescriptionKey])

self.delegate.findByIdFailed!(err)

}

}

host.startRequest(request)

}

public var delegate:NoteDAODelegate! //用来保存委托对象的属性

public class var sharedInstance:NoteDAO{

struct Static{

static var instance:NoteDAO?

static var token:dispatch_once_t = 0

}

dispatch_once(&Static.token){

Static.instance = NoteDAO()

}

return Static.instance!

}

《协议》

NoteDAODelegate

@objc public protocol NoteDAODelegate {

// 成功查询所有数据的方法

func findAllFinished(str:NSString)

// 查询所有数据失败后调用的方法

func findAllFailed(error:NSError)

// 成功安装主键查询数据的方法

optional func findByIdFinished(model:Note)

// 按照主键查询数据方法失败

optional func findByIdFailed(error:NSError)

}

//实体类

2、业务逻辑层

public class NoteBL: NSObject,NoteDAODelegate {

public var delegate:NoteBLDelegate! //保持代理的一个引用

public func findAllNotes(){

let dao:NoteDAO = NoteDAO.sharedInstance

dao.delegate = self

dao.findAll()

}

// NoteDAODelegate委托方法

public func findAllFinished(str:NSString){

self.delegate.findAllNotesFinished!(str)

}

public func findAllFailed(error:NSError){

self.delegate.findAllNotesFailed!(error)

}



《协议》

import Foundation

@objc public protocol NoteBLDelegate {

optional func findAllNotesFinished(str:NSString)

optional func findAllNotesFailed(error:NSError)

optional func createNoteFinished()

optional func createNoteFailed(error:NSError)

optional func modifyNoteFinished()

optional func modifyNoteFailed(error:NSError)

optional func removeNoteFinished()

optional func removeNoteFailed(error:NSError)

}

3、表示层

class ViewController: UIViewController,NoteBLDelegate {

let bl = NoteBL()

var str:NSString!

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {

super.viewDidLoad()

bl.delegate = self

// Do any additional setup after loading the view, typically from a nib.

// 调用业务逻辑层的方法

bl.findAllNotes()

}

//业务逻辑层BLNoteDelegate的方法

func findAllNotesFinished(str:NSString){

self.str = str

self.textView.text = str as String

}

func findAllNotesFailed(error:NSError){

let errorStr = error.localizedDescription

print(errorStr)

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

查询所有数据的时序图:

Client MasterViewController NoteBL NoteDAO

刷新画面触发查询 ——> 1:findAllNotes ——> 1.1:findAll

1.2.1:findAllNotesFinished < —— 1.2:findAllFinished: |

1.2.1:findAllNotesFailed < —— 1.2:findAllFailed: |

查询所有时序图是用户在加载主视图或刷新主视图触发的查询操作。

1⃣️:MasterViewController异步调用NoteBL类中的findAllNotes方法,接着中NoteBL类中异步调用NoteDAO类的findAll方法

2⃣️:如果成功,我们就会调用findAll方法,然后NoteDAO会回调NoteBL的findAllFinished:方法

3⃣️:如果失败,NoteDAO会回调NoteBL的findAllFailed:方法

4⃣️:在NoteBL中如果成功则回调MasterViewController的findAllNotesFinished:方法,更新表视图;

5⃣️:失败则回调 MasterViewController的findAllNotesFailed:方法 ,弹出警告对话框提示用户
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: