为什么强制解包会给我一个EXC_BREAKPOINT(SIGTRAP)错误?

时间:2016-11-11 10:55:06

标签: swift swift3

我的应用程序崩溃了我的for循环for participant in event.attendees!的声明。我相对较新,并且明白,如果我检查参与者阵列不是零,那么我可以自由地强行打开它。我在这里误解了什么?

    private static func parseParticipants(event: EKEvent) -> [Attendee] {
    var participants = [Attendee]()

    if(event.attendees != nil && event.attendees?.count != 0) {
        for participant in event.attendees! {
            let participantName = parseEKParticipantName(participant)

            let isRequiredParticipant = participant.participantRole == EKParticipantRole.Required
            let hasAccepted = participant.participantStatus == EKParticipantStatus.Accepted
            let attendee = Attendee(name: participantName, email: participant.URL.resourceSpecifier!.lowercaseString, required: isRequiredParticipant, hasAccepted: hasAccepted)
            participants.append(attendee)
        }
    }
    return participants
}

2 个答案:

答案 0 :(得分:1)

原来这不是关于强制解包,而是由于EKParticipant.url属性在包含一个包含"字符的字符串时返回nil。

let attendee = Attendee(name: participantName, email: participant.URL.resourceSpecifier!.lowercaseString, required: isRequiredParticipant, hasAccepted: hasAccepted)

我们使用它来访问参与者的电子邮件,但对url的任何读取或写入操作都会导致崩溃,因此我们使用EKParticipant.description属性并使用正则表达式解析了电子邮件。

let participantEmail = participant.description.parse(pattern: emailRegex).first ?? ""

答案 1 :(得分:0)

如何使用可选绑定?

if let attendees = event.attendees && attendees.count > 0 {

}