Size: a a a

iOS Developers — русскоговорящее сообщество

2019 October 14

Mihail in iOS Developers — русскоговорящее сообщество
Ivan Gnatyuk
ты неверное понимаешь как работает словарь. если ты говоришь что dict["a"] = nil - то в словаре ничего нет, нет ключа "a", пустой словарь
ты проверяешь ключ, а не значение
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
Sapar
добрый день, как в коллекшенвью дать отступ сверху только второму элементу?
Здесь только влоб делается, посредством attributes, т.е. перегрузкой UICollectionViewLayout
источник

VK

Vladimir Kubantsev in iOS Developers — русскоговорящее сообщество
Может стоит делать if let value = dict["key"], let _ = value { }?
источник

VK

Vladimir Kubantsev in iOS Developers — русскоговорящее сообщество
тип первое условие проверяет, есть ли значение по ключу, а второе - что это значение не nil
источник

Mihail in iOS Developers — русскоговорящее сообщество
Ivan
Тогда да. Я с Kotlin/Java пришёл. У нас так можно)
if let data = dict["key1"],
   data != nil {
   print(data)
}
источник

IG

Ivan Gnatyuk in iOS Developers — русскоговорящее сообщество
да, верно

var dict: [String: String?] = ["a": nil]
print(dict)
// ["a": nil]

dict["a"] =
nil
print(dict)
// [:]
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
Ivan
Привет. Не подскажите, как проверить, что value в Dicitionary != nil?

У меня есть вот такой словарь [String:String?]

if dict["myKey"] != nil возвращает true, если в словаре есть такой ключ, а как узнать, что его значение не nil
if let value = dict["myKey"] {
  // value != nil
} else {
  // value == nil
}

А вообще книгу от Apple прочитать, иначе зафейлишь проект.

С трудом представляю себе, где может понадобиться [String: String?] в отличие от [String: String]
источник

IN

Ivan Nikitin in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
Зачем делать layer.removeFromSuperlayer()?
в ячейке хранишь
let shapeLayer = CAShapeLayer()

При смене bounds / layer.Bounds (добавь переменную shapeBounds) задаешь новый path

Например:
https://prnt.sc/piyz6y

В setup вызывай setNeedLayout()
Спасибо, попробую. То есть добавляем addSublayer в корень ячейки. Но тут для прорисовки учитываем bounds самой ячейки, а если нужно учитывать расстоянием между элементами, после того, как они перерисовались
источник

VK

Vladimir Kubantsev in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
if let value = dict["myKey"] {
  // value != nil
} else {
  // value == nil
}

А вообще книгу от Apple прочитать, иначе зафейлишь проект.

С трудом представляю себе, где может понадобиться [String: String?] в отличие от [String: String]
Это ты и на наличие значения проверил и опционал заодно развернул разом?
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
Vladimir Kubantsev
Это ты и на наличие значения проверил и опционал заодно развернул разом?
смотреть надо в суть проблемы. Автору явно не нужен [String: String?]
источник

VK

Vladimir Kubantsev in iOS Developers — русскоговорящее сообщество
Почему?)
источник

IN

Ivan Nikitin in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
if let value = dict["myKey"] {
  // value != nil
} else {
  // value == nil
}

А вообще книгу от Apple прочитать, иначе зафейлишь проект.

С трудом представляю себе, где может понадобиться [String: String?] в отличие от [String: String]
А как насчёт id: ImageUrl ну или ссылки на аудиофайл
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
Ivan Nikitin
Спасибо, попробую. То есть добавляем addSublayer в корень ячейки. Но тут для прорисовки учитываем bounds самой ячейки, а если нужно учитывать расстоянием между элементами, после того, как они перерисовались
Ну я обычно для подобных случаев делаю примерно так
let shadowLayer = CAShadowLayer() // у тебя dashLayer
let shadowBounds: CGRect = .zero

в layoutSubviews() {
  let shadowBounds = bounds // либо функция от bounds
  if shadowBounds != self.shadowBounds {
     self.shadowBounds = shadowBounds
     updateShadowPath()
  }
}

как-то так.

У тебя будет в конструкторе
setupDashLayer()
и в layoutSubviews() ему путь будешь пересчитывать когда bounds слоя изменится
источник

ЛУ

Лысый Убийца in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
Ну я обычно для подобных случаев делаю примерно так
let shadowLayer = CAShadowLayer() // у тебя dashLayer
let shadowBounds: CGRect = .zero

в layoutSubviews() {
  let shadowBounds = bounds // либо функция от bounds
  if shadowBounds != self.shadowBounds {
     self.shadowBounds = shadowBounds
     updateShadowPath()
  }
}

как-то так.

У тебя будет в конструкторе
setupDashLayer()
и в layoutSubviews() ему путь будешь пересчитывать когда bounds слоя изменится
Дрочь
источник

IN

Ivan Nikitin in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
Ну я обычно для подобных случаев делаю примерно так
let shadowLayer = CAShadowLayer() // у тебя dashLayer
let shadowBounds: CGRect = .zero

в layoutSubviews() {
  let shadowBounds = bounds // либо функция от bounds
  if shadowBounds != self.shadowBounds {
     self.shadowBounds = shadowBounds
     updateShadowPath()
  }
}

как-то так.

У тебя будет в конструкторе
setupDashLayer()
и в layoutSubviews() ему путь будешь пересчитывать когда bounds слоя изменится
Понял, спасибо
источник

IN

Ivan Nikitin in iOS Developers — русскоговорящее сообщество
Вай?
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
Он намекает что можно подкласс сделать от CAShapeLayer
источник

IN

Ivan Nikitin in iOS Developers — русскоговорящее сообщество
Igor Nikolaev
Он намекает что можно подкласс сделать от CAShapeLayer
Я вообще вначале думал сделать extension UIView и добавить метод с добавлением этого слоя. И потом отдельно добавить вьюху в ячейку
источник

IN

Igor Nikolaev in iOS Developers — русскоговорящее сообщество
сделай подкласс CAShapeLayer, его конфигурацию через static func (внутри конструктор и после инициализация полей). Это нормальный способ.
Если подкласс не нужен - можно в ячейке пилить вроде того что выше. Если подобная ячейка 1 на все приложение используется, я подкласс не делаю )
источник