我使用的是第三方框架,有一个文件包含以下代码:
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
时,我收到了上面提到的编译器错误。为什么?如何摆脱它?
答案 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
}