gpt4 book ai didi

ios - 如何在 Swift 中创建一个 ((NSErrorPointer -> NSData!)!) 闭包

转载 作者:行者123 更新时间:2023-11-28 09:02:21 24 4
gpt4 key购买 nike

我正在尝试使用 ZipZap方法

ZZArchiveEntry(fileName: String!, compress: Bool, dataBlock: ((NSErrorPointer) -> NSData!)!)

在 Swift 中,但无法找出 dataBlock 闭包的正确语法。我尝试了以下代码:

let fileEntry = ZZArchiveEntry(fileName: "test.txt", compress: true, dataBlock: {
(error: NSErrorPointer) in
return "test".dataUsingEncoding(NSUTF8StringEncoding)!
})

这会导致以下错误:

Cannot find an initializer for type 'ZZArchiveEntry' that accepts an argument list of type '(fileName: String, compress: Bool, dataBlock: (NSErrorPointer) -> _)'

这样的闭包是否可行,如果可以,在 Xcode 7.0 beta 3 中如何实现?

最佳答案

您正在返回一个未包装的可选 NSData(即您正在返回一个非可选的)并且编译器只是感到困惑。

您可以通过将值暂存在变量中来解决它:

let fileEntry = ZZArchiveEntry(fileName: "test.txt", compress: true, dataBlock: {
(error: NSErrorPointer) in
let data = "test".dataUsingEncoding(NSUTF8StringEncoding)!
return data
})

或者,因为该闭包的预期返回类型是可选的,如果您删除该 !,错误就会消失:

let fileEntry = ZZArchiveEntry(fileName: "test.txt", compress: true, dataBlock: {
(error: NSErrorPointer) in
return "test".dataUsingEncoding(NSUTF8StringEncoding)
})

或者,正如其他人所指出的,您可以进一步简化:

let fileEntry = ZZArchiveEntry(fileName: "test.txt", compress: true) { error in
return "test".dataUsingEncoding(NSUTF8StringEncoding)
}

关于ios - 如何在 Swift 中创建一个 ((NSErrorPointer -> NSData!)!) 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678831/

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