2014-07-14 14 views
22

Dostaję błąd: "Missing argument dla parametru 'koder' w call" dla następującego kodu:Tworzenie przyszłą datę w Swift z NSDate()

var components = NSDateComponents()  
components.setValue(1,forComponent: NSCalendarUnit.CalendarUnitMonth); 
var expirationDate = NSCalendar.currentCalendar().dateByAddingComponents(components,  toDate: NSDate(),options:0) 

docs wzywa do:

NSCalendar.currentCalendar().dateByAddingComponents(<#comps: NSDateComponents?#>, toDate: <#NSDate?#>, options: <#NSCalendarOptions#>) 

Czy ktoś może zobaczyć, czego mi brakuje? Nie widzę wymaganego parametru o nazwie "koder".

Odpowiedz

48

że wydaje się być poprawne składniowo w Swift 1.2:

var components = NSDateComponents() 
components.setValue(1, forComponent: NSCalendarUnit.CalendarUnitMonth); 
let date: NSDate = NSDate() 
var expirationDate = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: date, options: NSCalendarOptions(0)) 

w Swift 2.0 trzeba zaktualizować ten kod trochę tak:

let components: NSDateComponents = NSDateComponents() 
components.setValue(1, forComponent: NSCalendarUnit.Month); 
let date: NSDate = NSDate() 
let expirationDate = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: date, options: NSCalendarOptions(rawValue: 0)) 
+0

nie rozumieją, co oznaczało, że błąd, zwłaszcza "koder" część, ale twój dylemat pracował. Gracias. – krisacorn

+0

Nie chciałbym być inteligentnym tyłkiem, by powiedzieć coś sprytnego - jeśli chodzi o _Xcode6_ to wciąż tylko beta - ale zakładam, że problem polegał na tym, że 'NSDate' był napisany jako parametr osadzony, a kompilator chciał wywołać' NSDate (coder:) 'metoda dla niego zamiast' NSDate() 'z jakiegoś powodu. to może być powód, dla którego miałeś komunikat o błędzie o brakującym parametrze "coder:". – holex

+1

Aktualizacja dla Swift 2.0 - zmień wartość opcji na: 'NSCalendarOptions (rawValue: 0)' – leanne

12

Składnia dla Swift 3

var components = DateComponents() 
components.setValue(1, forComponent: .month) 
let date: Date = Date() 
let expirationDate = Calendar.current.date(byAdding: components, to: date, options: []) 
5

Najnowsze Swift 3 składnia:

var components = DateComponents() 
components.setValue(1, for: .month) 
let date: Date = Date() 
let expirationDate = Calendar.current.date(byAdding: components, to: date)