gpt4 book ai didi

通过将类作为函数参数传递来调用类方法的 Swift 依赖注入(inject)

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

我可能以错误的方式处理这个问题,但我想为单元测试目的引入依赖注入(inject),为此我需要将一个类作为参数传递。在某种伪代码中,它应该如下所示:

protocol LocalSavingProtocol {
static func saveDataLocally()
}

class ProductionClass: LocalSavingProtocol {
static func saveDataLocally() {
print("actually save data")
}
}

class TestClass: LocalSavingProtocol {
static func saveDataLocally() {
print("test saving data")
}
}

func saveEverywhere(injecting localSavingClass: LocalSavingProtocol = ProductionClass) {
localSavingClass.saveDataLocally()
}

//production code
saveEverywhere()

//test
saveEverywhere(injecting: TestClass)

显然这是行不通的,尽管我尝试通过传递 .Type.self,更改 saveEverywhere 函数到

saveEverywhere<T: LocalSavingProtocol>(injecting localSavingClass: T)

等等,没有任何效果。

目标是拥有这样一个系统:

  1. 我可以在测试代码时注入(inject)一个类
  2. 我不必在生产代码中注入(inject)类(即有一个默认值)
  3. 我可以在注入(inject)类上调用类方法

最佳答案

protocol LocalSavingProtocol {
static func saveDataLocally()
}

class ProductionClass: LocalSavingProtocol {
class func saveDataLocally() {
print("actually save data")
}
}

class TestClass: LocalSavingProtocol {
class func saveDataLocally() {
print("test saving data")
}
}

func saveEverywhere(injecting localSavingClass: LocalSavingProtocol.Type = ProductionClass.self) {
localSavingClass.saveDataLocally()
}

//production code
saveEverywhere()

//test
saveEverywhere(injecting: TestClass.self)

关于通过将类作为函数参数传递来调用类方法的 Swift 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49603504/

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