我有一个快速类Jammingue,其中在objective-c中有一个名为tryagain的NSObject。我知道如何使用协议在swift viewcontrollers之间传递数据,但这里添加的元素是NSObject而不是ViewController以及Objective-C元素。可以以类似的方式使用协议吗?这就是我所拥有的:
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 :(得分:0)
你的问题不是很清楚。我想想你问的是如何在segue中的视图控制器之间传递一个自定义对象,它是NSObject的子类。
如果你有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类型的实例变量,因此您可以将自定义对象传递给目标视图控制器。