我是Swift的新手,我正在尝试使用闭包从ViewController返回结果

这是例子

class MD5Calculator {

    static func imageChecksum(imageArray: [UIImage], onCalculated: @escaping () -> [String]){

        DispatchQueue.global(qos: .userInitiated).async {

            var array: [String] = []

            for chosenImage in imageArray {
                if let jpegData = UIImageJPEGRepresentation(chosenImage, 80) {
                    let checksum = jpegData.md5()
                    let chsum = checksum.toHexString()
                    array.append(chsum)
                }
            }

            DispatchQueue.main.async {
                //return array
            }
        }

    }
}


我想在后台进行md5计算,完成后将其传递给viewController。

我创建了闭包,但是我不知道如何返回它。
我的问题是:


如何通过闭包传递字符串数组
如何在视图控制器中调用ImageChecksum

最佳答案

您对闭包的使用无效。您要发回的数组应该是闭包的参数,而不是返回类型。

这应该工作

class MD5Calculator {

    static func imageChecksum(imageArray: [UIImage], onCalculated: @escaping ([String]) -> ()){

        DispatchQueue.global(qos: .userInitiated).async {

            var array: [String] = []

            for chosenImage in imageArray {
                if let jpegData = UIImageJPEGRepresentation(chosenImage, 80) {
                    let checksum = jpegData.md5()
                    let chsum = checksum.toHexString()
                    array.append(chsum)
                }
            }

            DispatchQueue.main.async {
                //return array
                onCalculated(array)
            }
        }

    }
}


编辑:像这样在您的ViewController中使用它

MD5Calculator.imageChecksum(imageArray: [imageArray]) { array in
    // 'array' is your returned result
}

关于ios - 如何使用闭包返回数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42338338/

10-14 20:07