[英]How can use @escaping for a func which used in didSet without using a reference type in Swift?
[英]How can I access to didSet of a Type in general use case in Swift?
我正在研究一種稱為UIL的自定義類型,代表Unique Identifiable Label ,這是我的代碼:
struct UIL: Equatable {
init?(labelValue: String) {
if checkLabelAvailability(for: labelValue) {
identifiableLabelCollection.insert(labelValue)
self.labelValue = labelValue
}
else {
return nil
}
}
var labelValue: String
static func ==(lhs: UIL, rhs: UIL) -> Bool {
return lhs.labelValue == rhs.labelValue
}
}
var identifiableLabelCollection: Set<String> = Set<String>()
func checkLabelAvailability(for label: String) -> Bool {
return !identifiableLabelCollection.contains(label)
}
這是我的用例:
var myLabel: UIL? = UIL(labelValue: "Hello, world")
if let unwrappedValue: UIL = myLabel {
print("myLabel:", unwrappedValue.labelValue)
}
myLabel = UIL(labelValue: "Hello, world!")
if let unwrappedValue: UIL = myLabel {
print("myLabel:", unwrappedValue.labelValue)
}
myLabel = UIL(labelValue: "Hello, world")
if let unwrappedValue: UIL = myLabel {
print("myLabel:", unwrappedValue.labelValue)
}
else {
print("cannot use it! myLabel is now nil!")
}
這是結果:
myLabel:你好,世界
myLabel:你好,世界!
不能用! myLabel 現在為零!
問題就在這里,我應該從集合中刪除替換的 UIL 字符串以使其可用於下一次訪問,我可以將代碼放入myLabel的 didSet 中以實現此目標,但我想讓這發生在秘密中,讓開發人員可以自由地考慮它. 我想訪問 UIL 類型的 didSet ,然后如果 oldValue 和 newValue 彼此不同,我從集合中刪除 label 字符串。
我看到的唯一解決方案是使UIL
成為 class 然后刪除deinit
中的值
deinit {
identifiableLabelCollection.remove(labelValue)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.