Это хороший пост, посвященный частям быстрых хороших функций, таких как расширение, значение параметра по умолчанию, закрытие и т. Д. Но есть несколько мест с небольшими проблемами, вот моя версия.
2
Здесь оценка короткого замыкания кажется намного лучше, чем повторяющийся оператор?:.
//short-circuit is old but strong let ternaryDouble = conditional || conditional2 let ternaryTriple = conditional || conditional2 || conditional3
7
Пример кода 7 нетрудно понять большинству умных программистов, но он не ясен и не легко читается, я думаю, что, возможно, вы злоупотребили `guard`.
//short-circuit is old but strong return password.count > 8 && password.count < 15 && checkPasswordCharacters(password)
8
Код не является неправильным, но для того, чтобы использовать расширенный Swift, рекомендуется попытаться использовать функциональное программирование в максимально возможной степени, например forEach, map, compactMap, flatMap и reduce. Я почти не помню, когда использовал `for loop`.
//functional programming first (0..<5).map { $0 * 2} .forEach(aClosure)
9
Пример кода показал свойство enum, которое тесно с ним связано. В этом случае я обычно помещаю его в enum.
enum OS { case iOS, android, windows, sailfish, ubuntu var marketShare: Int { let shares: [OS: Int] = [ .iOS: 30, .android: 45, .windows: 15, .sailfish: 8, .ubuntu: 2] return shares[self] ?? 0 } } let operatingSystem_ = OS.iOS let marketShare_ = operatingSystem_.marketShare //another very basic version enum OSMarketShare: Int { case iOS = 30 case android = 45 case windows = 15 case sailfish = 8 case ubuntu = 2 } var marketShare_ = OSMarketShare.iOS.rawValue
10
В объявлении закрытия нет необходимости добавлять _ или имя.
//bad class Model { func getData(completion: ((_ name: String) -> Void)) { } } //better class Model { func getData(completion: (String) -> Void) { } } //best in some case typealias CompletionString = (String) -> Void class Model { func getData(completion: CompletionString) { } }
И при использовании замыкания объявлять тип тоже не нужно.
//bad model.getData { [weak self] (data: String) in self?.updateView(data) } //better model.getData { [weak self] data in self?.updateView(data) } //best in some case model.getData { [weak self] string in self?.updateView(string) }
Swift - это очень весело, наслаждайтесь.