我只是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()
然后它抛出我你不能分配"人"输入"让我们试试"
答案 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#也许。您不需要Person
和get
方法,您可以直接使用var。这意味着您可以像这样写set
:
Person
并像这样使用它:
@objc class Person: NSObject{
var firstName: String = ""
}
希望这能以任何方式帮助你。你可能想阅读segues,试着看一下http://raywenderlich.com的教程