无法在具有@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

所以我改变了类从NSObjectinheritance。 喜欢这个

 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)") } }