Pull to refresh

Comments 20

Если отредактировать русский язык, то получится отличная статья.

Там еще и с логической целостностью проблемы. Одно только "если вы упустили математический курс в средней школе, почитайте больше об этом здесь:" и следующий за ним кусок кода (вместо ожидаемого пояснения про наибольший общий делитель) чего стоят. :)

UIColor.redColor () становится UIColor.red ()

UIColor.redColor () становится UIColor.red

Конструкции типа
if array?.count > 0
надо переделывать в
if array != nil && array!.count > 0
или использовать добавленную xcode перегрузку оператора сравнения
func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
  switch (lhs, rhs) {
  case let (l?, r?):
    return l > r
  default:
    return rhs < lhs
  }
}
И если есть категория на Swift для типа, у которого убрали префикс NS, то ее уже нельзя использовать в ObjC классе.
if (array?.count ?? 0) > 0

или
if let array = array, array.count > 0 {
....
}


или
guard let array = array, array.count > 0 else { return }
Еще бы SourceKitService работал нормально было бы вообще шикарно. А так постоянное пропадание подсветки синтаксиса от любого чиха, периодическое разрастание процесса SourceKitService до 20Гб и т.д. и т.п. — очень раздражает.
Только мне кажется что полностью ломать обратную совместимость чтоб сменить имена методов это как-то странно?

Можно считать, что в терминах semver это версия 0.3.

В терминах semver это как раз 3.0, так как сломана обратная совместимость, нет?

С моей колокольни swift пока выглядит как under heavy development, ни разу ещё нормально не стабилизировавшись. Возможно, на iOS и Mac OS X это не так.
Semver допускает несовместимость между минорными версиями в рамках 0.x

До версии 1.0 semver позволяет вносить ломающие изменения в 0.* выпуски


4) Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable.
Слава богу что не боятся ломать, главное чтобы в лучшую сторону. С помощью современных инструментов отрефакторить несколько имен в проекте вполне посильная задача. Если бы они предложили какую-нибудь специальную утилитку для конвертации исходников было бы вообще шикарно. При этом язык не будет превращаться в кучу костылей и анахронизмов из-за фанатичного следования принципу «обратной совместимости».
А такая утилита и есть, при запуске старого проекта в Xcode, он сразу показывает окно «Convert to Swift 3». И делает это достаточно неплохо.
Она делает это ужасно на сколь-либо большом проекте. Например, у меня она поменяла это:

array.filter({ $0.property == entity })


на это:

array.filter({ $0.property! == entity })


В результате получаем крэш на этапе выполнения.
С селекторами, видимо, работа не закончена.

Например, имеем такой вызов в классе DemoViewController

//
//  DemoViewController.swift
//  Election Balls

   func animateScore()
    {
        if tempScore<maxScore {
            tempScore += 1
            scoreLabel.text = "\(tempScore)"
            Timer.scheduledTimer(timeInterval: 0.07, target: self, selector: #selector(PlayViewController.animateScore), userInfo: nil, repeats: false)
        } else {
        }
    }
  


работает правильно, хотя в вызове ошибка.

Я, конечно, не настоящий сварщик свифтер, но @discardableResult какой-то странной штукой кажется. В смысле, сознательно делаем метод с "не особо полезным" возвращаемым значением. Не лучше тогда сделать две разные функции/перегрузки и/или дать возможность подавлять предупреждение в вызывающем коде?

Простой пример не особо полезного возвращаемого значения (один из методов массива):


public mutating func removeAtIndex(index: Int) -> Element

@discardableResult mutating func remove(at index: Int) -> Element

Иногда нужен только побочный эффект, а иногда и результат.


дать возможность подавлять предупреждение в вызывающем коде

А вот этого, видимо, хотели избежать. Тот кто проектирует API знает, есть ли побочный эффект у функции и может правильно аннотировать. Если побочный эффект у функции имеется, то её вызов имеет смысл даже без использования результата. Если побочного эффекта нет, то без результата вызов смысла не имеет.

Да, согласен. Хотя, справедливости ради, важность возвращаемого значения может зависеть и от предметной области.

Это своя статья или перевод? Похоже на Google Translate, очень сложно читать.
Беглое гугление показало, что это просто перевод статьи с AppCoda.
1. При переводах принято указывать, что это перевод, а не оригинал
2. Переведено явно программно и потом, возможно, чуточку подправлено.

Sign up to leave a comment.

Articles