2016-03-24 23 views
0

我已枚举定义如下:夫特2:@objc协议和枚举阵列

@objc enum MyEnum: Int { 
    case Case1, Case2 
} 

和以下方案:

@objc protocol MyProtocol { 
    func myFunc(myData: [MyEnum]) 
} 

现在协议引发以下错误:

Method cannot be a member of a @objc protocol because the type of the parameter cannot be represented in Objective-C 

我不明白为什么会发生这种情况。为什么这个工程:

func MyFunc(myData: MyEnum) 

但抛出错误的数组?

我想传递一个Int数组,然后将其转换回枚举,但我不太喜欢它。有更好的解决方案吗?

回答

0

我不确定,但它不应该工作,因为Objective-C数组应该只包含指针,并且枚举Int不包含指针。

你可以尝试这样的事情

@objc enum MyEnum: Int { 
    case Case1, Case2 

    var numberValue : NSNumber { 

     get { 

      return NSNumber(
       integer: self.rawValue 
      ) 
     } 
    } 
} 

@objc protocol MyProtocol { 
    func myFunc(myData: [NSNumber]) 
} 
+0

是啊,你是对的,我没有想到的是NSArray中只能包含指针。至于解决方案,我将for循环移到了函数之外,而不是在函数之外进行变换,然后再在函数内部进行变换 – whtman