Ios 迁移到Swift 1.2后,无法将数组元素桥接到Objective-C
昨天,我将IOS Swift项目切换到了新的XCode 6.3和Swift 1.2。到目前为止,我已经很好地构建了所有内容,但有一次应用程序崩溃,出现了错误消息“致命错误:数组元素无法桥接到Objective-C”,该行如下所示:Ios 迁移到Swift 1.2后,无法将数组元素桥接到Objective-C,ios,objective-c,arrays,swift,Ios,Objective C,Arrays,Swift,昨天,我将IOS Swift项目切换到了新的XCode 6.3和Swift 1.2。到目前为止,我已经很好地构建了所有内容,但有一次应用程序崩溃,出现了错误消息“致命错误:数组元素无法桥接到Objective-C”,该行如下所示: let services = services as! [ServiceObject] 我读到这个错误是因为我在Swift数组中有Objective C对象作为成员,而Swift数组现在不再自动桥接到NSArray,因此我必须将我的ServiceObject类型的对
let services = services as! [ServiceObject]
我读到这个错误是因为我在Swift数组中有Objective C对象作为成员,而Swift数组现在不再自动桥接到NSArray,因此我必须将我的ServiceObject类型的对象设置为非Obj-C,或者将“services”声明为NSArray。奇怪的是ServiceObject不是Objective-C对象。这是该类的声明:
class ServiceObject: MonitoringObject {
let serviceDescription: String
let host: HostObject
var duration = 0
var plugin_output = ""
var active_checks_enabled = 0
var display_name = ""
var has_been_checked = 0
var acknowledged = 0
var acknowledgement_type = 0
var scheduled_downtime_depth = 0
var is_flapping = 0
var state = ServiceState.OK
var name: String {
return serviceDescription
}
init(serviceDescription: String, host: HostObject) {
self.host = host
self.serviceDescription = serviceDescription
}
var durationText: String {
if duration == -1 || duration == 0{
return "N/A"
} else if duration > 86400 {
let days = Int(floor(Float(duration) / 86400))
let hours = Int(floor(Float(duration % 86400) / 3600))
return "\(days)d, \(hours)h"
} else if duration > 3600 {
let hours = Int(floor(Float(duration) / 3600))
let minutes = Int(floor(Float(duration) % 3600 / 60))
return "\(hours)h, \(minutes)m"
} else if duration > 60 {
let minutes = Int(floor(Float(duration) / 60))
let seconds = duration % 60
return "\(minutes)m, \(seconds)s"
} else {
return "\(duration)s"
}
}
}
此外,ServiceObject所遵循的协议“MonitoringObject”不是Obj-C:
protocol MonitoringObject {
var name: String { get }
}
有人知道错误和崩溃的原因吗
编辑:这是包含失败行的整个方法,以使上下文更清晰:
private func buildHostServicesIndex(services: [MonitoringObject]) -> [HostServicesEntry] {
//typealias HostServicesEntry = (HostObject, [ServiceObject])
let services = services as! [ServiceObject]
let hosts = services.map {
(service) -> HostObject in
service.host
}
let distinctHosts = Helpers.distinct(hosts)
return distinctHosts.map {
(host) -> HostServicesEntry in
return (host, services.filter {
(service) -> Bool in
service.host == host
})
}
}
请在下一次标记正确的语言时,当问题与目标COF相关时,您标记C和C++。在尝试将其转换到<代码> [ServObjult]之前声明了什么类型的代码<代码>服务/代码>。在错误消息有意义之前,如果它是<代码> NSArray <代码>,因为<代码> NSArray < />不能包含非Objc对象。我不知道用C和C++标记了我的问题。如果我这样做了,我很抱歉。数组“services”被声明为[MonitoringObject],一个符合MonitoringObject协议的对象数组,也是ServiceObject遵守的协议。