Данный код является частью расширения даты. Однако в Swift 3 я получаю несколько ошибок, которые не исчезнут. Я уже изменил "NSCalendar" на "календарь":Расширения даты в Swift 3
func startOfWeek(_ weekday: Int?) -> Date? {
guard
let cal = Calendar.current,
let comp: DateComponents = (cal as Calendar).components([.yearForWeekOfYear, .weekOfYear], from: self) else { return nil }
comp.to12pm()
cal.firstWeekday = weekday ?? 1
return cal.date(from: comp)!
}
func endOfWeek(_ weekday: Int) -> Date? {
guard
let cal = Calendar.current,
var comp: DateComponents = (cal as Calendar).components([.weekOfYear], from: self) else { return nil }
comp.weekOfYear = 1
comp.day -= 1
comp.to12pm()
return (cal as NSCalendar).date(byAdding: comp, to: self.startOfWeek(weekday)!, options: [])!
}
Линии 3 & 11: пусть кал = Calendar.current, Initializer для условной привязки должны иметь факультативный тип, а не 'Календарь'
линия 12: у меня была ошибка, но фиксировано, изменив "пусть комп:" в "уаг комп:"
линия 14: comp.day - = 1 Ошибка: двоичный оператор '- =' не может применяться к операндам типа 'Int?' и 'Int'
Я не очень хорош с расширениями, этот код был адаптирован из расширения, которое я нашел в Интернете, поэтому обновление теперь оказывается трудным. Какие-либо предложения?
Устранение неполадок (вещи, которые я пробовал):
пусть кал = Календарь .current,
Ошибка:? '?' Calendar Type не имеет текущего статуса '
let cal: Календарь? = Calendar.current,
Ошибка: явно определенный тип 'Calendar?' добавляет дополнительный уровень необязательного инициализатора, делая дополнительную проверку всегда удается
пусть кал = Calendar.current ?,
Ошибка: Не удаешься использовать опциональные цепочки на неопциональном значении типа «Календарь»
Вы должны просто следовать тому, что компилятор говорит вам. Некоторые типы были опциями, теперь они не являются: удалите необязательные привязки. В нем говорится, что структура должна быть изменчивой: тогда она увидит, как она работает. И т. Д. – Moritz
@EricAya Я попробовал let cal: «Календарь? = Calendar.current ', а также' let cal = Calendar? .current 'и' let cal = Calendar.current? ' но никто не работал. Итак, как мне сделать календарь необязательным? –
просто угадать, 'comp.day - = 1' comp.day не lvalue, это просто возврат из метода, называемого day on comp ... в объективе-C есть некоторая магия, чтобы заставить свойства работать (то есть он отличается от точечного аксессора классического объекта obj c), возможно, что магия отключена в swift 3 –