【发布时间】:2019-12-27 09:26:50
【问题描述】:
我创建了Swift 框架并集成到ObjC 项目中。
现在,我想在ObjC 中传递/访问委托处理程序。
Swift 框架包含带有关闭和提交按钮的UIViewController。
ListViewController.swift SwiftFramework
public protocol ListHandler {
func submit(options: String)
func close()
}
public class ListViewController: UIViewController {
public var handler: ListHandler?
@objc func dismiss(_ sender: UIButton) {
handler?.close()
}
@objc func submit(_ sender: UIButton) {
handler?.submit(options: "Done")
}
}
已创建 MyApp-Bridginh-Header.h
并 SwiftWrapper.swift 显示 ListViewController
import SwiftFramework
@objc public class SwiftWrapper: NSObject {
@objc public var controller: ListViewController?
override init() {
print("Working")
}
@objc public func showListScreen() -> UIViewController {
self.controller = ListViewController(title: "List")
/*
IMPORTANT: How I can pass this to ObjC called controller?
*/
// self.controller?.handler =
return self.controller!
}
}
终于在 objC 视图控制器中,能够显示列表屏幕但不能传递委托和处理提交/关闭按钮操作。
ProductListViewController.m
#import "MyApp-Swift.h"
SwiftWrapper *wrapper = [[SwiftWrapper alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:[wrapper showListScreen]];
[self presentViewController:navController animated:YES completion:nil];
如何进入这里?
示例项目存储库: 斯威夫特框架:https://github.com/harshal-wani/SwiftListFramework ObjC 项目:https://github.com/harshal-wani/SwiftFrameworkDelegateExample
感谢您的帮助和建议。
谢谢
【问题讨论】:
-
为什么你的协议不是
@objc?你还想在哪里访问这个代表?我在你的代码中看不到它 -
您不能将@objc 添加到委托属性,因为它的类型不能在Objective-C 中表示
标签: ios objective-c swift frameworks delegates