2015-05-05 3 views
0

У меня есть быстрый класс Jammingue, в котором есть объект NSObject в объективе-c, называемый tryagain. Я знаю, как передавать данные между swift viewcontrollers, используя протоколы, но добавленным элементом здесь является NSObject, а не ViewController, а также элемент Objective-C. Можно ли использовать протоколы аналогичным образом? Это то, что у меня есть:Передача данных из ViewController в NSObject

protocol predesignedDelegate{ 
func sendPredesignedFunction(info: [String]) 
} 

class Jammingue: NSViewController{ 
var delegate: passDelegate? = nil 
var predesignedArray = [] 

func doDelegateStuff(){ 
    if let delegate = delegate{ 
     delegate.sendPredesignedFunction(predesignedArray) 

    } 

} 
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) { 
    if let second = segue.destinationController as? SecondViewController{ 
     second.representedObject = predesignedArray 
    } 
}` 

Проблема заключается в том destinationController только для viewcontrollers, а с другой стороны Segue, в Objective-C NSObject, я не могу использовать одни и те же команды для извлечения данных , Есть ли способ сделать то, что я пытаюсь сделать?

ответ

0

Ваш вопрос не очень ясен. I think Вы спрашиваете, как передать пользовательский объект, который является подклассом NSObject между вашими контроллерами представлений в segue.

Если у вас есть собственный подкласс NSObject, используйте этот тип класса вместо NSObject. Заголовок Objective-C может выглядеть следующим образом:

@interface MyCustomNSObject: NSObject 

@property (nonatomic, strong) //properties of your object go here... 

- (void) someMethod; //your object's method(s) go here. 
@end 

Затем в Swift код, объявить объект как тип MyCustomNSObject вместо NSObject:

В своем классе SecondViewController, объявить свойство этого обычая Тип:

class SecondViewController: NSViewController 
{ 
    var theCustomObject: MyCustomNSObject 
    //The other stuff for SecondViewController goes here 
} 

Тогда в классе Jammingue:

class Jammingue: NSViewController 
{ 
    var tryAgain: MyCustomNSObject 

    // blah blah blah... 
    override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) 
    { 
    if let second = segue.destinationController as? SecondViewController 
    { 
     second.representedObject = predesignedArray 
     second.customObject = tryAgain 
    } 
    } 
} 

Теперь как ваш класс Jammingue, так и ваш класс SecondViewController имеют переменные экземпляра типа MyCustomNSObject, поэтому вы можете передать свой пользовательский объект в контроллер целевого представления.

+0

Спасибо за сообщение такого тщательного ответа. Похоже, это сработает! Спасибо – Uzebeckatrente

+0

К сожалению, я не думаю, что это то, о чем я просил. Все, что я ищу, это иметь возможность ссылаться на переменную, инициализированную и определенную в ViewController в соответствующем NSObject, возможно, менее сложную, чем вы опубликовали. – Uzebeckatrente

+0

Что значит «... в соответствующем NSObject ...»? –