iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – IBOutlet属性是否应标记为可空或非空?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Objective-C中,我习惯于声明连接到Interface Builder的属性 @property (nonatomic, weak) IBOutlet UIView *myView; 现在我有一个使用新的XCode可空性属性的类.为了保持与Swift的兼容性,IBOutlet应该具有哪些可空属性?根据Apple的“Using Swift with Cocoa and Objective-
在Objective-C中,我习惯于声明连接到Interface Builder的属性

@property (nonatomic,weak) IBOutlet UIView *myView;

现在我有一个使用新的XCode可空性属性的类.为了保持与Swift的兼容性,IBOutlet应该具有哪些可空属性?根据Apple的“Using Swift with Cocoa and Objective-C”:

那么这是否意味着在Objective-C中应该将插座声明为非空的?

解决方法

如果您的类是用Swift编写的,则不能使用非可选属性,否则编译器会抱怨该属性从未被初始化.这就是为什么Apple建议将它声明为一个隐式解包的可选项,因为一旦你的对象被初始化,你就确定该属性包含一个值(除非你有一个悬挂的插座,这可能发生在……)

从Objective-C导出时,您可以将其标记为非空,并且它将作为非可选属性出现在Swift中,在这种情况下很好.请注意,您不能同时使用Nonnull和weak.

所以你可以这样做:

@property (nonatomic,strong,nonnull) IBOutlet UIView *subview;
// Exported to Swift as @IBOutlet var subview: UIView

要么

@property (nonatomic,weak,nullablE) IBOutlet UIView *subview;
// Exported to Swift as @IBOutlet weak var subview: UIView?

如果由于某种原因,您仍希望将属性作为隐式展开的可选项导出到Swift,则可以将该属性标记为null_resettable或null_unspecified.这不是他们的意思,但它仍然会产生预期的结果.有关这些注释的更多信息,请参见this blog post.

@property (nonatomic,null_unspecified) IBOutlet UIView *subview;
// Exported to Swift as @IBOutlet weak var subview: UIView!

大佬总结

以上是大佬教程为你收集整理的ios – IBOutlet属性是否应标记为可空或非空?全部内容,希望文章能够帮你解决ios – IBOutlet属性是否应标记为可空或非空?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。