【问题标题】:Accessing a swift property from objC从 objC 访问 swift 属性
【发布时间】:2017-10-17 12:10:48
【问题描述】:
- (void) tapGesture: (id)sender
{
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    NSInteger userID = gesture.view.tag;

    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
                                                         bundle:nil];
    OthersProfile *vc = (OthersProfile*)[storyboard instantiateViewControllerWithIdentifier:@"othersprofile"];
    NSString *strUserID = [NSString stringWithFormat:@"%ld", (long)userID];

    vc.userID = strUserID;
    [self.viewController.navigationController pushViewController:vc
                                                        animated:YES];
}

它曾经与 Xcode 8 / Swift 3 一起工作,但似乎 Xcode 9 和 Swift 4 存在问题。

我遇到属性 userID not found 错误。

在 Swift 文件中:

var userID : String = ""
override func viewDidLoad() {
    print(userID) //no value here
}

有人知道吗?

【问题讨论】:

  • 你确定这段代码在 XCode8 中有效吗?
  • @PuneetSharma 抱歉我更新了我的问题
  • Swift 4 不再向 Objective-C 运行时公开所有内容,因此您可能必须使用 @objc 注释属性

标签: ios objective-c swift xcode swift4


【解决方案1】:

试试这个:

@objc var userID : String = "

将 Swift 代码暴露给 Objective-C 的规则在 Swift 4 中改变了。因此,您的代码在 Swift 3 中还可以,因此您面临的困惑;)

the corresponding Swift Evolution proposal 中详细介绍了新设计。

【讨论】:

  • @UtkuDalmaz ...不幸的是,这是从 Swift 3 迁移到 Swift 4 时非常常见的问题:-(
【解决方案2】:

解决您应该解决如何访问控制器的其他问题:

这是因为vc.user 在您尝试设置它时为 nil,添加一个变量到 swift 控制器并设置它而不是 `vc.user.text

vc.yourVariable = strUserID;
[self.viewController.navigationController pushViewController:vc
                                                    animated:YES];

然后在 viewDidAppear 中你将能够使用这个变量来设置它

 @IBOutlet var user: UILabel!
 public var yourVariable: String = ""

 override func viewDidLoad() {
     user.text = yourVariable
     print(user.text!) //should be value

 }

【讨论】:

  • 我试过这个,但这次我在'OthersProfile *'类型的对象上找不到属性'userID'?错误。检查我的另一个问题stackoverflow.com/questions/46754687/…
  • 您是否导入文件以查看此变量?
  • 我没听懂你的问题?
  • 我确实更新了答案,检查设置变量 public 是否有帮助
猜你喜欢
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 2020-03-15
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多