gpt4 book ai didi

objective-c - (Swift - OOP) 如何将 Swift (VC1) 中实例化的类转至 Objective C (VC2) 至 Swift (VC3)

转载 作者:行者123 更新时间:2023-11-30 12:59:30 24 4
gpt4 key购买 nike

我只是 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。不知何故,我能够让它发挥作用。但是现在,我创建了一个登录快速 Controller (VC1),我想传递从 php 获得的数据,将其存储在实例化类(Person)中,然后将 Person 传递给该 Objective-C 类(VC2),然后使用从 VC2 到我创建的另一个 Controller swift 的人(VC3)。你能提供一个示例代码,用于将类从 swift 传递到 Objective C 到另一个 swift 吗?

谢谢!

我尝试过的:

VC1: //继续部分

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

VC2:(我真的不知道如何使用 Objective-C,但是其他帖子中的一些指南我不太了解)

//objective-c的头文件

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

VC3:

//已加载

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

textbox1.text = personClass.getFirstName()

然后它让我无法指定“Person”来输入“Lets Try”

最佳答案

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

但是...正如我所读,您有两个 UIViewController,一个称为 LoginViewController,另一个称为 HomeController,在它们之间您有 LetsTry 类,它是一个 ObjC 类,现在您希望将 Person 对象从 LoginViewController 传递到 HomeController 将其作为属性添加到您的 LetsTry 类中。

为此,您需要将您的 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,这意味着您的 seguedestination 应该是 HomeController 的一个实例。此外,HomeController 应该有一个 LetsTry 实例,如下所示:

var letsTry: LetsTry?

现在我们准备开始将事情联系在一起。

首先,您需要将您的 Person 添加到 segue 中的 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 类。您可以只在 HomeController 中使用 Person 类。但你可能有理由做你正在做的事情。

需要考虑的事项

你的Person类看起来有点“Java风格”,或者可能是C#风格。您不需要 getset 方法,直接使用 var 即可。这意味着您可以像这样编写您的 Person:

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

像这样使用它:

var person = Person()
var person.firstName = "Peter"

print(person.firstName) //gives me "Peter"

希望这对您有任何帮助。您可能想阅读有关 segues 的内容,请尝试查看 http://raywenderlich.com 上的教程。例如

关于objective-c - (Swift - OOP) 如何将 Swift (VC1) 中实例化的类转至 Objective C (VC2) 至 Swift (VC3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40013323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com