Время летит незаметно, спасибо, что поехали со мной в это путешествие!

Вот несколько вещей, которые я узнал на 6 неделе:

UICollectionViews

В одном collectionView может быть зарегистрировано любое количество ячеек. Мне нужно было иметь две пользовательские ячейки с разной высотой в разных разделах в одном collectionView. В целях тестирования я использовал имя раздела данных, чтобы сообщить collectionView, какую настраиваемую ячейку он должен использовать для рисования ячейки. Оптимально использовать строковое условие, потому что оно может измениться позже.

  • Обязательно зарегистрируйте все пользовательские ячейки, которые вам нужны при добавлении collectionView

Как видите, разные пользовательские ячейки в одном collectionView устанавливаются в соответствии с именем раздела:

Следующие методы могут быть реализованы в макете потока, если объект делегата не реализовал эти методы:

Круглые UIViews

Мне нужно было создать круглый UIView с цветом фона и белой рамкой. Однако стандартный встроенный метод, который Apple предоставляет для установки границы, заставляет цвет фона немного размываться вокруг белой границы на несколько пикселей. Его нельзя увидеть на симуляторе, но можно увидеть на устройстве iOS. Это особенно заметно, если вид с белой рамкой имеет белый фон. Растекание пикселей невозможно увидеть, если они находятся поверх чего-то, имеющего цвет.

Чтобы добиться идеального пикселя:

  • Я создал «фальшивую» границу, нарисовав белый круг UIView и нарисовав меньший UIView с цветом фона поверх него, создав иллюзию белой границы.

RxSwift

Я всегда думал, что ReplaySubjects, PublishSubjects, BehaviorSubjects необходимо предоставить наблюдаемый поток событий через привязку, но оказывается, что вы можете передать ему объект с событием onNext, если объект имеет тот же тип, что и ReplaySubject, PublishSubject, BehaviorSubject.

private let option = ReplaySubject<ProductOption>.create()
func update(option: ProductOption) {
self.option.onNext(option)
}

Я передаю ProductOption в функции обновления параметру ReplaySubject.

Тернарные операторы? :

contentView.backgroundColor = selection ? .modifierSelected : .modifierNotSelected

Если выделение истинно, установите цвет фона на .modifierSelected, иначе установите цвет фона на .modifierNotSelected

Тернарный оператор для меня довольно волшебный, потому что он сохраняет очень много кода и его легче читать. Если бы тернарный оператор не использовался, его можно было бы записать как:

if isSelected {
contentView.backgroundColor = .modifierSelected
} else {
contentView.backgroundColor = .modifierNotSelected

На последнее гораздо труднее смотреть ~

Спасибо за чтение!

О пятой неделе в качестве стажера iOS-разработчика читайте здесь

Покажите свою поддержку 👏 аплодисментами ниже, следуйте за мной в моем путешествии разработчика iOS 😊 в Twitter