我有一个对象,假设它称为“事件”。事件有几个选项。
struct Event {
var name: String!
var location: String?
var attendees: [String]?
var dresscode: String?
var startDate: NSDate!
var endDate: NSDate?
var description: String {
return "Name: \(name). Location: \(location). Attendees: \(attendees). Dresscode: \(dresscode). Start date: \(startDate). End date: \(endDate)."
}
}
当我调用描述时,它将返回一个字符串,并且取决于它们是否存在,可选值将返回 nil 或“可选(事件名称)”。我希望某些属性的选项为 nil 并返回未包装的值(如果存在)。
我看过这个选项:
var description: String {
switch (location, attendees, dresscode, endDate) {
//All available
case let (.Some(location), .Some(attendees), .Some(dresscode), .Some(endDate)):
return "Name: \(name). Location: \(location). Attendees: \(attendees). Dresscode: \(dresscode). Start date: \(startDate). End date: \(endDate)."
case let (.None, .Some(attendees), .Some(dresscode), .Some(endDate)):
return "Name: \(name). Location: Not Set. Attendees: \(attendees). Dresscode: \(dresscode). Start date: \(startDate). End date: \(endDate)."
default: return "Something."
}
这行得通,但对我来说,要涵盖所有情况,这将需要永远。它可能包含数百个案例。
所以我的问题是:有没有更简单的方法来做到这一点?如果不可用则返回 nil,如果可用则 unwrap。
谢谢!