gpt4 book ai didi

swift - self 类型作为闭包中的参数

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:40 24 4
gpt4 key购买 nike

是否有可能 UIView 的实例调用一个执行闭包的方法,并在该闭包内引用同一个实例?这是非通用版本:

import UIKit

public extension UIView {
func layout(from: (UIView) -> ()) {
from(self)
}
}

例如,当我用 UILabel 调用它时,我无权访问例如文本对齐方式。我可以在闭包内引用 UILabel 吗?我希望这样的事情会起作用:

func layout(from: (Self) -> ()) {
from(self)
}

但是它不编译。有解决方法吗?这就是我想要的:

let label = UILabel(frame: .zero)

label.layout { $0.textAlignment = .natural } // Currenly not working, since $0 = UIView.

最佳答案

不同的方法:具有关联类型的协议(protocol)扩展。

protocol Layout {
associatedtype View : UIView = Self
func layout(from: (View) -> ())
}

extension Layout where Self : UIView {
func layout(from: (Self) -> ()) {
from(self)
}
}

extension UIView : Layout {}

let label = UILabel(frame: .zero)
label.layout { $0.textAlignment = .natural }

关于swift - self 类型作为闭包中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55549509/

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