从上一节可见使用静态链接库比较麻烦,需要给使用者提供.a和.h文件,还要配置很多环境变量。根据表10-1所述,基于同一工作空间框架实现的分层可以有WFSSS、WFOOO、WFSOO和WFOSS模式,本节先介绍WFSSS模式。 10.6.1 创建框架工程 首先,参考10.5节创建一个工作空间,然后添加表示层工程到工作空间,接着创建数据持久层和业务逻辑层的框架工程,具体创建过程如下:在Xcode中选择菜单项File→New→ Project…,在打开的对话框中选择Framework & Library→Cocoa Touch Framework工程模板,如图10-22所示。 图10-22 创建框架工程 如果我们是在工作空间中创建工程,创建过程中要选择工作空间。如图10-23所示,在Add to和Group中都选择MyNotesWorkspace,然后点击Create按钮创建工程。 图10-23 选择工作空间 10.6.2 依赖关系建立 三个工程的依赖是:BusinessLogicLayer依赖于PersistenceLayer,PresentationLayer依赖于BusinessLogicLayer。BusinessLogicLayer和PersistenceLayer都是框架工程,我们需要设置BusinessLogicLayer依赖于PersistenceLayer,相对来讲要比静态链接库建立依赖关系要简单得多。 首先,选择TARGETS→BusinessLogicLayer→Build Phases→Link Binary With Libraries,如图10-24所示,选择左下角的+按钮,然后从弹出界面中选择PersistenceLayer.framework,再点击Add按钮,这样依赖关系就添加好了。 图10-24 添加依赖关系 参考上面的步骤设置PresentationLayer和BusinessLogicLayer的依赖关系。另外,框架工程还需要设置Presentation Layer和PersistenceLayer的依赖关系,最后结果如图10-25所示。 图10-25 添加完依赖关系 提示 表示层工程依赖于框架工程时,需要设置业务逻辑层和数据持久层两个依赖关系。而在静态链接库工程时,表示层工程只需要与业务逻辑层建立依赖关系即可,这是因为业务逻辑层静态链接库文件(libBusinessLogicLayer.a)内部已经包含了数据持久层相关类了。 10.6.3 代码重构 为了适应于在工作空间中使用框架,我们需要将10.4.1节的代码进行重构,这主要是修改访问类、方法和属性的访问限定级别。 1. 重构Note.swift Note类的代码如下: import Foundation public class Note { public var date:NSDate public var content:NSString public init(date:NSDate, content:NSString ) { self.date = date self.content = content } } 我们需要为Node类添加public访问限定修饰符,还需要在属性date和content中添加public访问限定修饰符。构造器init也应该是public的。 2. 重构NoteDAO.swift NoteClass类的代码如下: import Foundation public class NoteDAO { //保存数据列表 var listData: NSMutableArray! ① public class var sharedInstance: NoteDAO { ...... return Static.instance! } //插入备忘录的方法 public func create(model: Note) -> Int { ...... } //删除备忘录的方法 public func remove(model: Note) -> Int { ...... } //修改备忘录的方法 public func modify(model: Note) -> Int { ...... } //查询所有数据的方法 public func findAll() -> NSMutableArray { ...... } //修改备忘录的方法 public func findById(model: Note) -> Note? { ...... } } 上述代码中,第①行的listData属性的访问限定级别是默认,而不是public的。类和方法的访问限定级别是public。 3. 重构NoteBL NoteBL类的代码如下: import Foundation import PersistenceLayer ① public class NoteBL { public init() { ② } //插入备忘录的方法 public func createNote(model: Note) -> NSMutableArray { var dao:NoteDAO = NoteDAO.sharedInstance dao.create(model) return dao.findAll() } //删除备忘录的方法 public func remove(model: Note) -> NSMutableArray { var dao:NoteDAO = NoteDAO.sharedInstance dao.remove(model) return dao.findAll() } //查询所有数据的方法 public func findAll() -> NSMutableArray { var dao:NoteDAO = NoteDAO.sharedInstance return dao.findAll() } } 上述代码中,第①行用于引入PersistenceLayer(数据持久层)模块。如果不引入该模块,则在PersistenceLayer框架中找不到Note类和NoteDAO类,而且这两个类还应该是public的。第②行代码用于声明默认构造器init的访问限定级别是public。 此外,在表示层PresentationLayer,也需要修改代码import代码: import BusinessLogicLayer import PersistenceLayer
iOS开发指南 从零基础到App Store上架(第3版)——10.6 基于同一工作空间框架实现的WFSSS模式
书名: iOS开发指南 从零基础到App Store上架(第3版)
作者: 关东升
出版社: 人民邮电出版社
出版年: 2015-4-1
页数: 658
定价: CNY 99.00
装帧: 平装
ISBN: 9787115387769