Как вернуть типизированный изменяемый массив из Swift в Objective-C? - PullRequest
0 голосов
/ 16 января 2019

В Objective-C я использую дженерики, и мне они очень нравятся, в Swift я хочу использовать Array, но в Objective-C он доступен только как Array, поэтому, похоже, мне нужно вернуть NSMutableArray, потеряв при этом сигнатуру типа, которую Swift не поддерживает? Это так должно работать?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Так что я закончил так:

@objc lazy var categories: Array<ForumCategoryData> = []

@objc func add(category: ForumCategoryData) {
    categories.append(category)
}

потому что совместимость с целью c создает другие проблемы в замыканиях, если вы возвращаете NSMutableArray ... Я просто пытаюсь написать как можно более чистый код, а для смешанного swift / target-c это чистая война.

0 голосов
/ 16 января 2019

В Swift NSMutableArray не поддерживает генерики. Также в Swift мы избегаем передачи изменяемых данных между методами. Поэтому лучше всего сделать это в Swift, чтобы сохранить информацию о вашем типе:

@objc
func someArray() -> [String] {
    return ["Hello"]
}

А затем сделайте изменяемую копию в Objective-C:

NSArray<NSString *> *array = [someClass someArray];
NSMutableArray<NSString *> *mutableArray = [array mutableCopy];
[mutableArray addObject:@"Hello again!"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...