gpt4 book ai didi

swift - 在 block 方法中提取自身属性

转载 作者:行者123 更新时间:2023-11-28 08:02:04 25 4
gpt4 key购买 nike

我在理解我在 Swift 中的具体请求时遇到了一些困难。有一个名为 Origin 的类及其多个子类。如何更新仅在 Origin 类中编写的 block 方法?

class Origin: NSObject {
func mod(_ block: (() throws -> Void)) {
try! block()
}
}

我需要使用所有Origin子类的mod,我需要有这样的使用效果:

var originSubclassObject = OriginSubclass() 
originSubclassObject.mod {
.age = 12 //age is OriginSubclass property
.name = "Bob" //name is OriginSubclass property
}

所以,你看,我需要提取 OriginSubclass 属性以便在 mod-block 中使用。我需要创建与使用效果代码完全一样的用法(从“.”中提取 mod-caller 属性)。感谢大家的帮助!

最佳答案

您可以考虑具有默认实现的协议(protocol),例如:

protocol Modifiable { }

extension Modifiable {
func mod(_ block: ((Self) throws -> Void)) {
try! block(self)
}
}

class Origin: Modifiable { }

class OriginSubclass: Origin {
var name: String?
var age: Int?
}

然后:

let originSubclassObject = OriginSubclass()
originSubclassObject.mod { object in
object.age = 12
object.name = "Bob"
}

或者

let originSubclassObject = OriginSubclass()
originSubclassObject.mod {
$0.age = 12
$0.name = "Bob"
}

或者,如果该基类仅用于 mod 方法,您可能会完全失去它:

protocol Modifiable { }

extension Modifiable {
func mod(_ block: ((Self) throws -> Void)) {
try! block(self)
}
}

class MyObject: Modifiable {
var name: String?
var age: Int?
}

let myObject = MyObject()
myObject.mod { object in
object.age = 12
object.name = "Bob"
}

或者

let myObject = MyObject()
myObject.mod {
$0.age = 12
$0.name = "Bob"
}

关于swift - 在 block 方法中提取自身属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384673/

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