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,您最好在可能的情况下编写惯用代码。。