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

Ios 二进制运算符’==’;不能应用于两个结构操作数,ios,swift,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: A

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

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            
}

当我检查
serviceType
是否为
Normal
时,我得到了上面提到的编译器错误。为什么?如何摆脱它?

我不知道斯威夫特,但据我所知 您的结构是服务类型,它是类型为AdService> 我认为你需要在结构中获取变量来进行操作,比如举个例子

myStruct{
int x
int y
}
现在这个条件对我来说是有效的

myStruct obj1;
obj1.x = 50;
obj2.y = 40;
if(obj.x==obj.y)
像这样的。您必须访问结构内部的值,而不是结构本身。或者更确切地说,为
(struct.x==struct2.x&&struct.y==struct2.y)
相当于表示struct==其他一些struct的值

我对第三方框架不太了解。但我知道有些类型不使用“==”而是使用.equals。例如:

if aService!.serviceType.equals(Normal)

也许这样就可以了。

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

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

AdServiceType
结构不可
equalable
,不能用作开关表达式。但是它的
值可以。尝试:

switch aService!.serviceType.value {
case Internal.value:
   //do something
case Normal.value:
   //do something
case External.value:
  //do something
default:
  ...
}
或者,您可以扩展
AdServiceType
添加对
equalable
协议的支持:

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

让开关保持原样。

只需将其更改为class和nsobject,就可以结束痛苦了

class MyClass: NSObject {

    //Write code in here
}

我将通过使结构可平衡来修复它:

extension AdServiceType: Equatable {}

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

应该将其实现为
枚举
。现在,您可以比较
serviceType.value
或遵循
equalable
协议,并提供一个自定义的比较逻辑,以便在
AdServiceType
@iosDev82上使用
=
,我对此表示怀疑,但是的,我认为这是有意义的,所以我已经标记了它。ThanxI使用了该值,但出现错误:二进制运算符“~=”不能应用于“AdServiceType”和“UInt”您是否在所有地方都使用了值?在开关线上和所有的外壳线上?哦,我只在开关线上使用。谢谢现在好了!完全不同意,swift的优势之一是具有结构的值类型,您应该查看“在swift中使用值类型构建更好的应用”(Building Better Apps with value type in swift)(),如果我不能轻松使用==的话,那么就没有什么意义了。您还错过了所有其他NSObject实用程序函数。如果您打算使用Swift,您最好在可能的情况下编写惯用代码。。