我的应用程序崩溃了我的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
}
答案 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 {
}