Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 迁移到Swift 1.2后,无法将数组元素桥接到Objective-C_Ios_Objective C_Arrays_Swift - Fatal编程技术网

Ios 迁移到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类型的对

昨天,我将IOS Swift项目切换到了新的XCode 6.3和Swift 1.2。到目前为止,我已经很好地构建了所有内容,但有一次应用程序崩溃,出现了错误消息“致命错误:数组元素无法桥接到Objective-C”,该行如下所示:

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遵守的协议。