Swift:重载 == 运算符被用于另一种类型
Swift: Overloaded == operator being used on another type
我已经为名为 PBExcuse
的 class 重载了“==”运算符,但是在尝试比较 EKSourceType
对象时,编译器尝试使用我的 PBExcuse
重载运算符,无法编译。错误消息是:“'EKSourceType' 不可转换为 'PBExcuse'”。
这里是适用的代码:
比较的地方:
for (var i = 0; i < eventStore.sources().count; i++) {
let source:EKSource = eventStore.sources()[i] as EKSource
let currentSourceType:EKSourceType = source.sourceType
let sourceTypeLocal:EKSourceType = EKSourceTypeLocal
if (currentSourceType == sourceTypeLocal){ //something is wrong here!!
calendar.source = source;
println("calendar.source \(calendar.source)")
break;
}
}
在PBExcuse.swift中:
func == (left:PBExcuse, right:PBExcuse) -> Bool{
if (left.event == right.event && left.title == right.title && left.message == right.message){
return true
}
return false
}
final class PBExcuse:NSObject, NSCoding, Equatable, Hashable{...}
EKSourceType
是一个结构
struct EKSourceType {
init(_ value: UInt32)
var value: UInt32
}
所以你只能比较它的value
属性:
if (currentSourceType.value == sourceTypeLocal.value) { ... }
编译器消息具有误导性。由于 ==
没有为 EKSourceType
定义,
编译器尝试将结构转换为 some 定义了 ==
的其他类型。
如果没有您的自定义 PBExcuse
class,错误消息将是
'EKSourceType' is not convertible to 'MirrorDisposition'
请注意,您可以将循环稍微简化为
for source in eventStore.sources() as [EKSource] {
if source.sourceType.value == EKSourceTypeLocal.value {
// ...
}
}
我已经为名为 PBExcuse
的 class 重载了“==”运算符,但是在尝试比较 EKSourceType
对象时,编译器尝试使用我的 PBExcuse
重载运算符,无法编译。错误消息是:“'EKSourceType' 不可转换为 'PBExcuse'”。
这里是适用的代码: 比较的地方:
for (var i = 0; i < eventStore.sources().count; i++) {
let source:EKSource = eventStore.sources()[i] as EKSource
let currentSourceType:EKSourceType = source.sourceType
let sourceTypeLocal:EKSourceType = EKSourceTypeLocal
if (currentSourceType == sourceTypeLocal){ //something is wrong here!!
calendar.source = source;
println("calendar.source \(calendar.source)")
break;
}
}
在PBExcuse.swift中:
func == (left:PBExcuse, right:PBExcuse) -> Bool{
if (left.event == right.event && left.title == right.title && left.message == right.message){
return true
}
return false
}
final class PBExcuse:NSObject, NSCoding, Equatable, Hashable{...}
EKSourceType
是一个结构
struct EKSourceType {
init(_ value: UInt32)
var value: UInt32
}
所以你只能比较它的value
属性:
if (currentSourceType.value == sourceTypeLocal.value) { ... }
编译器消息具有误导性。由于 ==
没有为 EKSourceType
定义,
编译器尝试将结构转换为 some 定义了 ==
的其他类型。
如果没有您的自定义 PBExcuse
class,错误消息将是
'EKSourceType' is not convertible to 'MirrorDisposition'
请注意,您可以将循环稍微简化为
for source in eventStore.sources() as [EKSource] {
if source.sourceType.value == EKSourceTypeLocal.value {
// ...
}
}