无法在具有@objc属性的协议中使用自定义类?
我正在尝试为JSON加载委派JSONLoaderDelegate
创build一个协议。 我的另一个名为JSONLoader
类应该派发事件给它的委托(实现JSONLoaderDelegate
协议),如下所示:
self?.delegate?.jsonLoaderdidEndWithError(self!, error: JSONLoaderError.LoadError)
JSONLoader的实现并不重要(imho)。 但是,我似乎有执行协议的问题,这是代码:
@objc protocol JSONLoaderDelegate { optional func jsonLoaderdidBeginLoading(jsonLoader: JSONLoader) func jsonLoaderdidEndWithError(jsonLoader: JSONLoader, error: JSONLoader.JSONLoaderError) func jsonLoaderDidEndWithSuccess(jsonLoader: JSONLoader) }
这看起来很简单,但我得到一个错误:
方法不能标记@objc,因为参数的types不能在Objective-C中表示。
指出了所有三个function。
显然,如果我删除@objc
属性,我不能使用该function的optional
。 我真的想保持jsonLoaderdidBeginLoading
作为可选的寿。 任何想法/方法来解决这个问题? 谢谢!
这三种方法共同之处在于JSONLoader
参数,这就是我认为阻止您桥接协议的原因。 为了解决这个问题,你必须使它与objc兼容。
我面临这个问题,因为我有一个没有父类的类MyConnection
。 喜欢这个。
public class MyConnection { }
在这之前我不能把@objc
,因为我得到一个警告
只有inheritance自NSObject的类可以被声明为@objc
所以我改变了类从NSObject
inheritance。 喜欢这个
public class MyConnection: NSObject { }
JSONLoaderError.LoadError
这是一个枚举types? 您不能将Swift枚举转换为Obj-C代码。 你需要使用一个int来代替。
我有同样的错误。 method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C.
我在swift 2.0中将语法更改为以下语法。 现在工作正常!
@objc protocol AppModelDelegate { optional func compititorList(com:[Competitor]!) } class Competitor:NSObject{ var id:Int? var title:String? }
注意:竞争者类的types改为NSObject,清除了委托规则违规
另外在NSJSONparsing的情况下。 我改变了以下。
if (_httpStatusCode == 200) { let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) var error : NSError? print("responseString : \(responseString) ") var service_result:NSDictionary = NSDictionary() do { let anyObj = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! [String:AnyObject] service_result = anyObj } catch let error as ErrorType { print("json error: \(error)") } }