Utrzymam to tak krótko i prosto, jak to możliwe.
Mam rozszerzenie NSDate, którego używam do wielu rzeczy w całej mojej aplikacji, ale napotkałem problem z (dziwnie) bardzo prostą funkcją.
Odpowiednia część rozszerzenia to:
import Foundation
extension NSDate {
func nineAMMonday() -> NSDate {
let greg = NSCalendar.currentCalendar()
let componenets = NSDateComponents()
componenets.weekday = 2
componenets.hour = 9
componenets.minute = 0
componenets.second = 0
return greg.dateFromComponents(componenets)!
}
}
Jego celem jest po prostu zwrócenie daty NSD, która odnosi się do poniedziałku rano.
Jak na razie dobrze...
Problem polega na tym, że gdy próbuję wywołać tę funkcję, pojawia się błąd:
Brak argumentu dla parametru nr 1 w wywołaniu
Czytam tutaj https://stackoverflow.com/a/26156765/3100991 o kimś, kto miał podobny problemich kod był długi i mylący, a ja nie rozumiałem odpowiedzi. Myślę, że byłoby użyteczne dla ogólnej społeczności, gdyby podano proste wyjaśnienie i poprawkę.
Dzięki za pomoc z góry!
Loic
Odpowiedzi:
2 dla odpowiedzi № 1Po prostu próbuję tego (na placu zabaw) i działa. Myślę, że twój błąd jest wywołany twoją metodą. ponieważ twoja metoda jest metodą instancji, musisz ją wywołać na istniejącym obiekcie daty. Więc spróbuj to tak nazwać:
import Foundation
extension NSDate {
func nineAMMonday() -> NSDate {
let greg = NSCalendar.currentCalendar()
let componenets = NSDateComponents()
componenets.weekday = 2
componenets.hour = 9
componenets.minute = 0
componenets.second = 0
return greg.dateFromComponents(componenets)!
}
}
// Call
var date = NSDate();
date.nineAMMonday()
Ale w twoim przypadku najlepszą rzeczą do zrobienia jest funkcja klasy.
import Foundation
extension NSDate {
class func nineAMMonday() -> NSDate {
let greg = NSCalendar.currentCalendar()
let componenets = NSDateComponents()
componenets.weekday = 2
componenets.hour = 9
componenets.minute = 0
componenets.second = 0
return greg.dateFromComponents(componenets)!
}
}
// Call
NSDate.nineAMMonday()