gpt4 book ai didi

ios - 如何在 Swift 中用不同的 block 实现 objc_setAssociatedObject?

转载 作者:行者123 更新时间:2023-11-28 06:36:27 24 4
gpt4 key购买 nike

正如标题所描述的那样。我终于找到了一个通用的解决方案,并展示给大家。并希望有人能有更好的解决方案。

最佳答案

只需按照以下步骤操作即可:

class BlockWrapper<T> {
let block: T?
init (_ b: T?) { self.block = b }
}

public typealias YourBlock = (param: [String:String]) -> Bool
public typealias YourBlock2 = () -> Bool

extension UIButton {
@nonobjc static var iActionBlockKey = Int8(0);
public var actionBlock: YourBlock? {
set {
objc_setAssociatedObject(self, &UIButton.iActionBlockKey, BlockWrapper<YourBlock>(newValue), .OBJC_ASSOCIATION_RETAIN)
}
get {
let wrapper = objc_getAssociatedObject(self, &UIButton.iActionBlockKey) as? BlockWrapper<YourBlock>
return wrapper?.block
}
}
@nonobjc static var iActionBlockKey2 = Int8(0);
public var actionBlock2: YourBlock2? {
set {
objc_setAssociatedObject(self, &UIButton.iActionBlockKey2, BlockWrapper<YourBlock2>(newValue), .OBJC_ASSOCIATION_RETAIN)
}
get {
let wrapper = objc_getAssociatedObject(self, &UIButton.iActionBlockKey2) as? BlockWrapper<YourBlock2>
return wrapper?.block
}
}
}

关于ios - 如何在 Swift 中用不同的 block 实现 objc_setAssociatedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38972138/

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