通过typealias swift关闭不工作
为什么typealias闭包不向控制台传输数据而不输出任何内容?如何修复它通过typealias swift关闭不工作,swift,xcode,closures,Swift,Xcode,Closures,为什么typealias闭包不向控制台传输数据而不输出任何内容?如何修复它 class viewModel: NSObject { var abc = ["123", "456", "789"] typealias type = ([String]) -> Void var send: type? func createCharts(_ dataPoints: [String]) { var dataEntry: [String] = []
class viewModel: NSObject {
var abc = ["123", "456", "789"]
typealias type = ([String]) -> Void
var send: type?
func createCharts(_ dataPoints: [String]) {
var dataEntry: [String] = []
for item in dataPoints {
dataEntry.append(item)
}
send?(dataEntry)
}
override init() {
super.init()
self.createCharts(abc)
}
}
class ViewController: UIViewController {
var viewModel: viewModel = viewModel()
func type() {
viewModel.send = { item in
print(item)
}
}
override func viewDidLoad() {
super.viewDidLoad()
print("hello")
type()
}
}
我有一个类似设计的项目,但我不能重复它模式很好,但时间不确定 在视图模型的
init
期间调用createCharts
。但是视图控制器在视图模型的init
完成后设置send
关闭
总之,在视图模型的
init
期间,您可能不想调用createCharts
。模式很好,但计时已关闭
在视图模型的init
期间调用createCharts
。但是视图控制器在视图模型的init
完成后设置send
关闭
总之,在视图模型的
init
期间,您可能不想调用createCharts
。可能的解决方案是创建自定义初始值设定项:
class viewModel: NSObject {
...
init(send: type?) {
self.send = send
self.createCharts(abc)
}
}
class ViewController: UIViewController {
var viewModel: viewModel = viewModel(send: { print($0) })
...
}
可能的解决方案是创建自定义初始值设定项:
class viewModel: NSObject {
...
init(send: type?) {
self.send = send
self.createCharts(abc)
}
}
class ViewController: UIViewController {
var viewModel: viewModel = viewModel(send: { print($0) })
...
}
从技术上讲,计时器可以做到这一点,但这不是正确的方法。问题是调用
createCharts
的合适触发器是什么。也许视图控制器应该调用它。或者,您应该在视图模型中有一个执行此操作的start
方法。或者,视图模型闭包的setter应该具有调用它的观察者。你把这个例子做得如此抽象,以至于很难给出建议……从技术上讲,计时器可以做到这一点,但这不是正确的方法。问题是调用createCharts
的合适触发器是什么。也许视图控制器应该调用它。或者,您应该在视图模型中有一个执行此操作的start
方法。或者,视图模型闭包的setter应该具有调用它的观察者。您已经将示例变得如此抽象,以至于很难给出建议…不相关,但我可能建议给视图模型类一个以大写字母开头的名称。能够立即区分某个对象的实例化(例如let bar=Foo()
)和某个函数的调用(例如let bar=Foo()
)@Rob谢谢,我会考虑这一点!不相关,但我可能建议给视图模型类一个以大写字母开头的名称。能够立即区分某个对象的实例化(例如let bar=Foo()
)和某个函数的调用(例如let bar=Foo()
)@Rob谢谢,我会考虑这一点!非常感谢。它起作用了。我的项目有一个类似的实现,但我不能重复了。非常感谢。它起作用了。我的项目也有类似的实现,但我就是不能重复