我正试图用迅捷的语言来表达我的 idea .在使用Objective-C的代码中构建视图时,一种常见的模式是覆盖UI属性,并像这样延迟加载它们:

@property(nonatomic, strong) UILabel *myLabel;

- (UILabel *)myLabel
{
     if (!_myLabel) {
         _myLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 75.0f, 320.0f, 20.0f)];
        [_myLabel setFont:[UIFont subHeadlineFont]];
        [_myLabel setTextColor:[UIColor subHeadlineColor]];
        [_myLabel setText:@"Hello World"];
     }
     return _myLabel;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view addSubview:self.myLabel];
}

这允许UIElements的配置在其设置中自包含,但不会导致每次都重新配置它们.

我们似乎无法访问Swift中的备份存储,而且@lazy关键字的语义也不完全相同.

我很好奇,是否有人在Swift中发现了一种类似的模式,允许人们以简洁的语法方式保留变量和常量的配置及其声明,而不是每次都导致重新配置?

推荐答案

我认为用闭包初始化lazy个属性可以:

lazy var myLabel: UILabel = {
    var temporaryLabel: UILabel = UILabel()
    ...
    return temporaryLabel
}()

当我读到《快速编程语言》时(棋盘格示例)闭包只计算一次).

Swift相关问答推荐

如何分解阿拉伯字母?

如何在visionOS中进行购买?&# 39;购买(选项:)在visionOS中不可用

RxSwift .debounce,.throttle用于分页

从Swift中的泛型类继承?

Swift 扩展:通过方法重载增强现有类

循环字典中的数组

计算 CoreData 中所有唯一对象的数量?

为什么变量不存储在 Swift 的过程数据区中

CardStack 和 Lottie

是否有一个带有空初始值设定项的 Swift 类/ struct 的标准协议

TextField 键入未完成

为什么 id 不能通过 struct 从 Objective-C 移植到 Swift?

如何在 SWIFTUI 中旋转修剪?

在 macOS (Swift) 上获取 BSD 驱动器名称的最佳方法是什么?

来自数据的 SwiftUI 图像

使 Swift 并发中的任务串行运行

iOS 判断应用程序是否可以访问麦克风

我可以在 Swift 中为泛型类型 T 分配默认类型吗?

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

如何在 iOS 上的 Swift 中获取 sharedApplication?