我需要定义一个可以在使用某些Objective-c类型的类中调用的协议
但是这样做不起作用:
enum NewsCellActionType: Int {
case Vote = 0
case Comments
case Time
}
@objc protocol NewsCellDelegate {
func newsCellDidSelectButton(cell: NewsCell, actionType: NewsCellActionType)
}
你明白他的错误
Swift enums cannot be represented in Objective-C
如果我没有在协议上放置@objc标记,则它将在采用该协议并从Objective-
C类型类(如UIViewController)继承的类中被调用时立即使应用程序崩溃。
所以我的问题是,我应该如何使用@objc标签声明并传递我的枚举?
Swift枚举与Obj-C(或C)枚举有很大不同,它们不能直接传递给Obj-C。
解决方法是,可以使用Int
参数声明方法。
func newsCellDidSelectButton(cell: NewsCell, actionType: Int)
并作为传递NewsCellActionType.Vote.toRaw()
。但是,您将无法从Obj-C访问枚举名称,这使代码更加困难。
更好的解决方案可能是在Obj-C中实现枚举(例如,在桥接头中),因为这样它将可以在Swift中自动访问,并且可以将其作为参数传递。
编辑
不需要添加@objc
仅用于Obj-C类。如果您的代码是纯Swift,则可以毫无问题地使用枚举,请参见以下示例作为证明:
enum NewsCellActionType : Int {
case Vote = 0
case Comments
case Time
}
protocol NewsCellDelegate {
func newsCellDidSelectButton(cell: UITableViewCell?, actionType: NewsCellActionType )
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, NewsCellDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
test()
return true;
}
func newsCellDidSelectButton(cell: UITableViewCell?, actionType: NewsCellActionType) {
println(actionType.toRaw());
}
func test() {
self.newsCellDidSelectButton(nil, actionType: NewsCellActionType.Vote)
}
}
问题内容: 背景 我正在尝试使用NSCoding协议对String样式的枚举进行编码,但是我遇到了转换为String和从String返回的错误。 解码和编码时出现以下错误: 字符串不可转换为舞台 额外参数ForKey:通话中 码 问题答案: 您需要将枚举值与原始值进行转换。在Swift 1.2(Xcode 6.3)中,如下所示: Swift 1.1(Xcode 6.1),代替: 迅速1.0(6.0
问题内容: 现在,我所知道的唯一为angularjs调用在标头中动态设置令牌的方法是通过这样的方式: 但是我想弄清楚如何通过$ resource传递此信息,这是一些无效的伪代码: 如何将标头动态传递给angularjs的$ resource? 问题答案: 我不认为这可以按照您尝试的方式完成,因为config对象在action方法上不可用。但是action config方法具有它。因此,您可以做的是
问题内容: 我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。 通过引用进行传递是否与在Objective-C或Java中通过“ a”引用进行传递的方式相同,还是通过引用进行正确传递? 问题答案: Swift中的事物类型 规则是: 类实例是 引用类型 (即, 您 对类实例的引用实际上是一个 指针 ) 函数是参考类型 其他一切都是 价值类型 ; “其他所有内容”仅表示
问题内容: 我正在使用wahoo Fitness API,它定义了以下Objective-C枚举: 我找不到快速使用它的方法。我首先尝试对其进行切换/操作,但未成功。我正要继续进行以下操作: 但是它不能编译: 任何解决方法?我阅读使用,但在xcode beta-4中不起作用。 问题答案: 如您所说,从.beta 4开始,使用.value获取基础整数的解决方法不再起作用。 不幸的是an 不能从Obj
我是新来的Spring。我的一个项目需要调用一个自动任务应用编程接口,它在标题中包含应用编程接口集成代码、用户名和密码。如何将其集成到Rest模板中? 下面是我在swagger上测试的API的截图。使用Swagger调用API的截图