【发布时间】:2017-12-09 18:59:05
【问题描述】:
在 Swift 中,lazy properties 允许我们仅在请求时初始化一个类成员,而不是直接在运行时初始化 - 这对于计算量大的操作很有用。
我在 Swift 4 中有一个类,负责从提供的 StrategyProtocol 对象的编译时(开发人员硬编码)数组初始化 strategy。它看起来像这样:
class StrategyFactory {
private var availableStrategies: [StrategyProtocol] = [
OneClassThatImplementsStrategyProtocol(),
AnotherThatImplementsStrategyProtocol() // etc
]
public func createStrategy(): StrategyProtocol {
// Depending on some runtime-calculated operation
// How do I do this nicely here?
}
}
但是,据我了解,将 () 放在每个策略的末尾会初始化对象(?),而我可能只想根据某些运行时条件创建一个。
无论哪种方式,是否可以在 Array 类成员中的值周围放置 lazy 以仅在我要求时实例化我想要的那个?还是我必须使用闭包或其他替代方法来解决这个问题?
当前尝试
这是在做我认为的事情吗?在我得到数组的第一个元素并执行它之前,它实际上不会实例化策略?
private var availableStrategies: [() -> (StrategyProtocol)] = [
{ OneClassThatImplementsStrategyProtocol() }
]
【问题讨论】:
标签: arrays swift lazy-initialization