(Swift - OOP)如何将在Swift(VC1)中实例化的类转换为Objective C(VC2)到Swift(VC3)

时间:2016-10-13 05:57:45

标签: objective-c swift oop segue

我只是swift的初学者,我试图通过创建一个类来执行OOP样式,然后将其属性设置为:

@objc class Person: NSObject{

var firstName: String = ""

public func getFirstName() ->String
{
    return firstName
}

public func setFirstName(name: String)
{
    firstname = name
}}

我使用了AppCoda的侧边栏菜单,其编码在objective-c中。不知怎的,我能够让它发挥作用。但是现在,我创建了一个登录swift控制器(VC1),我想传递我从php得到的数据,将它存储在实例化的类(Person)中,然后将Person传递给那个目标C类(VC2),然后使用VC2中的Person到我创建的另一个控制器swift(VC3)。你能提供一个示例代码,用于将类从swift传递到objective c到另一个swift吗?

谢谢!

我尝试过的事情:

VC1:     // segue part

var personClass = Person()
personClass.setFirstName(name: "Sample")
let DestinationViewController:LetsTry = segue.destination as! LetsTry
DestinationViewController.personClass = personClass
VC2 :(我真的不知道如何实现目标-c,但其他一些我不太了解的帖子指南)

// objective-c的头文件

@interface LetsTry : NSObject
@property (strong, nonatomic) id firstName;
- (void) someMethod;
@end

VC3:

// didload

var personClass = Person()
personClass = LetsTry() as! Person

textbox1.text = personClass.getFirstName()

然后它抛出我你不能分配"人"输入"让我们试试"

1 个答案:

答案 0 :(得分:0)

我仍然不完全清楚你在这里想做什么,因此这个答案可能是错误的。

但是......当我读到它时,你有两个UIViewController,一个叫LoginViewController,另一个叫HomeController,介于你LetsTry类之间,这是一个ObjC类,现在您希望将Person对象从LoginViewController传递到HomeController,方法是将其作为属性添加到LetsTry类。< / p>

为此,您需要将Person作为属性添加到LetsTry,如下所示:

#import "Person.h" <-- don't quote me on this one, maybe it isn't needed

@interface LetsTry : NSObject
    @property (strong, nonatomic) id firstName;
    @property (strong, nonatomic) Person *person;
    - (void) someMethod;
@end

接下来,您的segue应该从LoginViewController转到HomeController,这意味着destination的{​​{1}}应该是segue的实例。此外,HomeController应该有HomeController的实例,如此:

LetsTry

现在我们已经准备好开始将事情捆绑在一起了。

首先,您需要将var letsTry: LetsTry? 添加到segue中的Person,而不是这个(根本不起作用))

LetsTry

你会做类似的事情:

var personClass = Person()
personClass.setFirstName(name: "Sample")
let DestinationViewController:LetsTry = segue.destination as! LetsTry
DestinationViewController.personClass = personClass

最后,在var personClass = Person() personClass.setFirstName(name: "Sample") var letsTry = LetsTry() letsTry.person = person if let destinationViewController: HomeController = segue.destination as? HomeController { destinationViewController.letsTry = letsTry } 代替:

HomeController

你会这样做:

var personClass = Person()
personClass = LetsTry() as! Person

textbox1.text = personClass.getFirstName()

反问题:)

当你看上面的内容时,你可能会开始怀疑你是否需要if let letsTry = letsTry { textbox1.text = letsTry.person.getFirstName() } 课程。您可以在LetsTry中使用Person课程。但你可能有理由做你正在做的事情。

需要考虑的事项

你的HomeController类看起来有点像“Java-esque”,或者C#也许。您不需要Personget方法,您可以直接使用var。这意味着您可以像这样写set

Person

并像这样使用它:

@objc class Person: NSObject{
    var firstName: String = ""
}

希望这能以任何方式帮助你。你可能想阅读segues,试着看一下http://raywenderlich.com的教程