考虑

extension UIView {
    
    static var Trick: UIIView {
        let v = UIView()
        v.backgroundColor = .yellow
        return v
    }
}

因此是addSubview(UIView.Trick)等等.

然而

private lazy var yellowLabel: UILabel = {
    let v = UILabel.Typical
    v.font = U.systemFont(ofSize: 200)
    return v
}()

当然是错误的. 有没有办法……

extension V where V is one of the UIView types {
    
    static var Trick: V {
        let v = " V "()
        v.backgroundColor = .yellow
        return v
    }
}

有办法吗?

推荐答案

类扩展中计算(computed)属性的类型可以是Self,以指定调用属性的具体类型.Self()还创建了该具体类型的实例:

extension UIView {
    static var Trick: Self {
        let v = Self()
        v.backgroundColor = .yellow
        return v
    }
}

现在

private lazy var yellowLabel: UILabel = {
    let v = UILabel.Trick // <-- Type of `v` is UILabel
    v.font = .systemFont(ofSize: 200)
    return v
}()

按预期编译和工作.

Swift相关问答推荐

启用完成并发判断以及如何解决警告(续)

在SwiftUI中使用自定义图像填充列表行的正确方法

在visionOS 1.0中已弃用';base Color';:请改用`Color`属性

从SwiftUI使用UIPageView时,同一页面连续显示两次的问题

在一行语句中比较Date.now的相等性是否安全

是否可以使用一个 NSRegularExpression 同时判断字符串格式并提取子字符串?

UIImage和UIimage.pngData返回两个不同的图像

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

在 init(from decoder: Decoder) 方法中访问原始 JSON 数据

列表不显示信息

如何在 SwiftUI 中用图像替换占位符文本?

如何在 ZStack 中单独下移卡片?

P384 公钥获取IncorrectParameterSize

带有屏幕参数的 NSWindow 初始化程序在初始化时导致致命错误

如何更改 Picker 的边框 colored颜色

协议扩展中的where self是什么

Swift if 语句 - 多个条件用逗号分隔?

在 Swift 中指定 UITextField 的边框半径

iOS:如何检测用户是否订阅了自动更新订阅

为什么枚举具有计算(computed)属性但在 Swift 中没有存储属性?