Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过typealias swift关闭不工作_Swift_Xcode_Closures - Fatal编程技术网

通过typealias swift关闭不工作

通过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] = []

为什么typealias闭包不向控制台传输数据而不输出任何内容?如何修复它

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谢谢,我会考虑这一点!非常感谢。它起作用了。我的项目有一个类似的实现,但我不能重复了。非常感谢。它起作用了。我的项目也有类似的实现,但我就是不能重复