2015-01-11 3 views
2

У меня есть класс Swift User и класс Swift Artist. A User может иметь много Artists, и эта взаимосвязь и эти классы реализованы в коде ниже.Доступ к быстрым массивам от цели C

import UIKit 

class Artist: NSObject { 
    var name: String 

    init(name: String) { 
     self.name = name 
    } 
} 

class User: NSObject { 

    var artists = [Artist]() 
    var name: String 

    init(name: String) { 
     self.name = name 
    } 

} 

Мне нужно, чтобы иметь возможность редактировать массив художников из Objective C. Когда я пытаюсь добавить объект в массив художников, Xcode рассказывает мне, что массив художников типа NSArray и не может быть изменен. Есть ли способ получить доступ к этому массиву как NSMutableArray?

+1

Вы делаете это неправильно. Не должно быть никакого кода вне класса User, который модифицирует массив художников. Другие классы не должны даже знать, что существует массив художников. Добавьте методы добавления/удаления художников в класс User и вызовите их из вашего кода Obj-C. –

ответ

2

В Objective C, вы можете просто скопировать массив изменяемого массива:

NSMutableArray *mutableArtists = [artists mutableCopy]; 
[mutableArtists addObject:...]; // Add your objects to mutableArtists or make other changes. 
NSArray *artistsToReturn = [mutableArtists copy]; 
return artistsToReturn; 

В качестве альтернативы, вы можете отдать свой Swift массив быть типа NSMutableArray в определении класса, если вы счастливы за него работать как NSMutableArray вместо того, чтобы обычные Swift изменяемые характеристики массива:

var artists : NSMutableArray = [Artist]() 

в Свифта, можно также вместо того, чтобы создать копию NSMutableArray массива, что вы могли бы получить доступ из вашего класса Objective-C вместо этого, если бы это было больше conv

var mutableArtists = NSMutableArray(artists) 
Смежные вопросы