二进制运算符'=='不能应用于两个结构操作数

时间:2015-09-04 11:02:41

标签: ios swift

我使用的是第三方框架,有一个文件包含以下代码:

struct AdServiceType {
    init(_ value: UInt)
    var value: UInt
}
var Internal: AdServiceType { get }
var Normal: AdServiceType { get }
var External: AdServiceType { get }

class AdService : NSObject {
   var serviceType: AdServiceType
   init!()
}

然后,在我自己的项目课中,我有

var aService : AdService?

//aService is initialised

//COMPILER ERROR: Binary operator ’==’ cannot be applied to two AdServiceType operands
if aService!.serviceType == Normal {
   //DO SOMETHING            
}

当我检查serviceTypeNormal时,我收到了上面提到的编译器错误。为什么?如何摆脱它?

6 个答案:

答案 0 :(得分:7)

AdServiceType结构不是Equatable,不能用作切换表达式。但它的value可以。尝试:

switch aService!.serviceType.value {
case Internal.value:
   //do something
case Normal.value:
   //do something
case External.value:
  //do something
default:
  ...
}

或者,您可以扩展AdServiceType添加对Equatable协议的支持:

extension AdServiceType : Equatable {}
public func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool
{
    return lhs.value == rhs.value
}

并按原样保留开关。

答案 1 :(得分:1)

我会通过使结构Equatable:

来解决它
extension AdServiceType: Equatable {}

func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool {
    return lhs.value == rhs.value;
}

答案 2 :(得分:0)

我不知道很快,但据我所知 您的结构是服务类型,它是AdService>类型的对象。 我认为你需要在结构中获取变量来进行操作以给出一个例子

myStruct{
int x
int y
}

现在条件对

有效
myStruct obj1;
obj1.x = 50;
obj2.y = 40;

if(obj.x == obj.y) 像这样的东西。你必须访问struct中的值,而不是struct本身。或者更确切地说,为&&运营商分配 (struct.x == struct2.x && struct.y == struct2.y)几乎代表values of struct == values of some other struct

答案 3 :(得分:0)

我发现最简单的解决方案是比较struct属性的值:

if aService!.serviceType.value == Normal.value {
   //DO SOMETHING.
}

答案 4 :(得分:-2)

我对您的第三方框架没有太多了解。但我知道有些类型不使用' =='但是.equals。例如:

if aService!.serviceType.equals(Normal)

也许应该这样做。

答案 5 :(得分:-2)

只需将其更改为类和nsobject,然后忍受痛苦。

class MyClass: NSObject {

    //Write code in here
}