FZRouterSwift
示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
安装
FZRouterSwift 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到 Podfile 中
pod 'FZRouterSwift'
使用说明
默认 plist 文件数据模板
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fran</key>
<dict>
<key>www.franzhou.com</key>
<dict>
<key>routerTest</key>
<array>
<dict>
<key>target</key>
<string>RouterDemo</string>
<key>actions</key>
<dict>
<key>router_action</key>
<string>testRouterAction</string>
</dict>
</dict>
<dict>
<key>actions</key>
<dict>
<key>oc_router_action</key>
<string>testOCRouterAction</string>
<key>oc_router_action_2</key>
<string>testOCRouterAction2</string>
</dict>
<key>target</key>
<string>OCRouterDemo</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
FZDefaultURLRouterPlistLoader 将进行解析转换
fran://www.franzhou.com/routerTest/router_action -> target: Target_RouterDemo action: testRouterAction:
fran://www.franzhou.com/routerTest/oc_router_action -> target: Target_OCRouterDemo action: testOCRouterAction:
fran://www.franzhou.com/routerTest/oc_router_action_2 -> target: Target_OCRouterDemo action: testOCRouterAction2:
输出目标文件如下
swift
@objc(Target_RouterDemo)
class Target_RouterDemo: NSObject {
@objc class func testRouterAction(_ dataPacket: FZRouterDataPacketProtocol) {
if let params = dataPacket.parameters {
print("testRouterAction parameters : \(params.description)")
}
dataPacket.returnValue = "Target_RouterDemo.testRouterAction"
}
@objc class func urlRouter(_ dataPacket: FZRouterDataPacketProtocol) {
if let params = dataPacket.parameters {
print("urlRouter parameters : \(params.description)")
}
dataPacket.returnValue = "Target_RouterDemo.urlRouter"
}
}
oc
#import <FZRouter/FZRouter-Swift.h>
@implementation Target_OCRouterDemo
+ (void)testOCRouterAction:(id<FZRouterDataPacketProtocol>)dataPacket{
NSLog(@"testOCRouterAction parameters : %@", dataPacket.parameters);
dataPacket.returnValue = @"Target_OCRouterDemo.testOCRouterAction";
}
+ (void)testOCRouterAction2:(id<FZRouterDataPacketProtocol>)dataPacket{
NSLog(@"%@", dataPacket.parameters);
dataPacket.returnValue = @(9527);
}
@end
我们可以这样调用路由器,参数将传递到目标-动作方法。您可以记录返回值并接收它。
if let result = try? FZRouter.defaultRouter.router(withRouterURL: "fran://www.franzhou.com/routerTest/router_action?name=zhoufan"){
print("\(String(describing: result.parameters)) -> \(String(describing: result.returnValue))")
}
FZRouter.defaultRouter.router(withRouterURL: "fran://www.franzhou.com/routerTest/oc_router_action", extraParameters: ["name": "FranZhou", "age": 29])
FZRouter.defaultRouter.router(withRouterURL: "fran://www.franzhou.com/routerTest/oc_router_action_2")
我们可以通过其他方式更新或保存路由器
FZRouter.defaultRouter.updateOrSave(withRouterURL: "fran://www.franzhou.com/routerDemo/urlRouter") { (dataPacket) in
dataPacket.returnValue = { () -> Void in
print("I am happy")
}
}
if let result = try? FZRouter.defaultRouter.router(withRouterURL: "fran://www.franzhou.com/routerDemo/urlRouter"){
print("\(String(describing: result.parameters)) -> \(String(describing: result.returnValue))")
if let returnValue = result.returnValue as? () -> Void{
returnValue()
}
}
您可以根据自己的需要实现 FZDefaultURLRouter 来实现自己的路由解析器。
作者
FranZhou, [email protected]
swift QQ交流群群号:628172981
许可证
FZRouterSwift采用MIT许可证。更多信息请参阅LICENSE文件。