Size: a a a

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

2020 August 31

Y

Yurka in iOS Developers — русскоговорящее сообщество
Если найду, напишу как это называется, сам раз в пять лет на это натыкаюсь
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Yurka
Как раз таки нет)
Да, тк строка 24 работает и метод fetchRequest из протокола компилится
Иначе в строке 11, NSFetchRequest<Self> не скомпилировалось бы, тк Self ОБЯЗАН быть NSManagedObject
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Я уже проверял без where если что
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Yurka
А если protocol CloudKitManagedObject where Self = (какой-то там другой класс)
Тогда NSFetchRequest<Self> не скомпилится потому что уже написал почему))
источник

b

bodich in iOS Developers — русскоговорящее сообщество
bodich
Вот, написал развернуто, чтобы убрать все вопросы, почему так))
* Если убрать дженерик и просто сделать
entityType: CloudKitManagedObject.Type
то не компилируется строка 19 а 28 работает )))
источник

Y

Yurka in iOS Developers — русскоговорящее сообщество
bodich
Без него тоже самое
в цикле результат type.init() какой будет иметь тип? NSManagedObject
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Yurka
в цикле результат type.init() какой будет иметь тип? NSManagedObject
Интересная идея. Я тебя понял, сейчас проверю
источник

b

bodich in iOS Developers — русскоговорящее сообщество
bodich
Вот, написал развернуто, чтобы убрать все вопросы, почему так))
Но почему строка 24 работает же?)) Я туда передаю тот же Item.self
источник

Y

Yurka in iOS Developers — русскоговорящее сообщество
там конкретный класс, а тут протокол. У этой фигни есть название, забыл  🙁
Там нужно наворачивать класс, который содержит протокол, который уже выполняет все, что у тебя уже есть
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Yurka
там конкретный класс, а тут протокол. У этой фигни есть название, забыл  🙁
Там нужно наворачивать класс, который содержит протокол, который уже выполняет все, что у тебя уже есть
Но смотри, в массиве у меня на 100% тоже самое что я передаю параметром в строке 24... Идентично!
источник

KS

Kei Sidorov in iOS Developers — русскоговорящее сообщество
bodich
Но смотри, в массиве у меня на 100% тоже самое что я передаю параметром в строке 24... Идентично!
Да ты срезал тип когда обьявил массив
источник

KS

Kei Sidorov in iOS Developers — русскоговорящее сообщество
Это два разных типа. Item.self и его срез до типа твоего протокола
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Kei Sidorov
Это два разных типа. Item.self и его срез до типа твоего протокола
Похоже недоработка/баг, тк ошибка говорит
Global function 'fetchingFunc(entityType:)' requires that 'NSManagedObject' conform to 'CloudKitManagedObject'

А я именно CloudKitManagedObject и передаю, это явно объявлено. И дженерик это CloudKitManagedObject а не Item.Type и т.п.
источник

KS

Kei Sidorov in iOS Developers — русскоговорящее сообщество
bodich
Похоже недоработка/баг, тк ошибка говорит
Global function 'fetchingFunc(entityType:)' requires that 'NSManagedObject' conform to 'CloudKitManagedObject'

А я именно CloudKitManagedObject и передаю, это явно объявлено. И дженерик это CloudKitManagedObject а не Item.Type и т.п.
Да нет тут бага.
источник

KS

Kei Sidorov in iOS Developers — русскоговорящее сообщество
Когда ты срезаешь тип до твоего протокола, компилятор теряет остальные знания о типе. И не может проверить является ли он NSManagedObject или нет. Когда ты ему в 14 строке весь тип объекта передаёшь - может.
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Kei Sidorov
Да нет тут бага.
Item явно conforms CloudKitManagedObject, а ошибка пишет что нет
источник

b

bodich in iOS Developers — русскоговорящее сообщество
И если я уберу дженерик, а сделаю в строке 18
entityType: CloudKitManagedObject.Type
то все в цикле прекрасно подставляется
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Kei Sidorov
Когда ты срезаешь тип до твоего протокола, компилятор теряет остальные знания о типе. И не может проверить является ли он NSManagedObject или нет. Когда ты ему в 14 строке весь тип объекта передаёшь - может.
Ок, я сделал скрин. Передаю все тоже самое! Теперь работает, передавать надо все тот же CloudKitManagedObject
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Единственное отличие что не через дженерик, передаю все тоже самое, все работает включая цикл
источник

b

bodich in iOS Developers — русскоговорящее сообщество
Item это явно CloudKitManagedObject же
источник