Ich habe diese Funktion:Ich habe offenbar eine optionale in meinem Code, aber der Compiler denkt, ich habe nicht
func getTodaysDate() -> (day: String, date: String) {
let currentDate = Date()
let monthFormatter = DateFormatter()
let dayFormatter = DateFormatter()
monthFormatter.dateFormat = "MMMM"
monthFormatter.locale = Locale(identifier: "en_US")
let month = monthFormatter.string(from: currentDate)
dayFormatter.dateFormat = "EEEE"
dayFormatter.locale = Locale(identifier: "en_US")
let dayToday = dayFormatter.string(from: currentDate)
let calendar = Calendar.current
let dateComponents = (calendar as NSCalendar).components([NSCalendar.Unit.day], from: currentDate)
let day = String(describing: dateComponents.day)
let date = ("\(month) \(day!)")
return (day: dayToday.uppercased(), date: date.uppercased())
}
Welche zurückkehren sollte:
FREITAG, 21. April
Aber stattdessen gibt es zurück:
FRI TAG, APRIL OPTIONAL (21)
Was ich nicht bekomme, weil die Konstante 'Tag' nicht optional ist. Selbst wenn ich es der Compiler versuchen Abwickeln beklagt, dass es
nicht unwrap Wert von nicht-optionalen Typ ‚String‘ erzwingen
Hat jemand eine Idee, was los ist?
Ist 'dateComponents.day' nicht optional? Wenn Sie einen Initializer "Optional in einer Zeichenfolge" verwenden, erhalten Sie das gefürchtete "optionale" Literal. Entpacken Sie diese Eigenschaft, bevor Sie sie im String-Initialisierer verwenden. – Moritz
Was Eric sagte, was Sie brauchen, ist ein 'wenn dayAsInt = dateComponents.day lassen {...}' weil · Tag ein optional, siehe https://developer.apple.com/reference/foundation/ datecomponents/1779808-day – muffe
'String (Beschreibung: dateComponents.day)' entpackt das optionale nicht, es druckt nur die Debug-Beschreibung – redent84