FZRouterSwift 0.1.1

FZRouterSwift 0.1.1

FranZhou 维护。



  • FranZhou

FZRouterSwift

CI Status Version License Platform

示例

要运行示例项目,请克隆仓库,然后首先从 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文件。