(WP / S)тип обработчика ZipArchive progress/completion в Swift

Я пытаюсь использовать библиотеку ZIP WPZipArchive, которая является вилкой ZipArchive aka SZipArchive, но у меня есть проблема с unzipFileAtPath:toDestination:overwrite:password:progressHandler:completionHandler(phew) функцией.
WPZipArchive.h#L35-L40

Я программирую в Swift, и у меня есть проблема с написанием обработчиков для обработчиков прогресса и завершения

например, как создать ((String!, unz_file_info, Int, Int)->Void)!обработчик?

Несколько попыток:

    WPZipArchive.unzipFileAtPath(help, toDestination: temp, progressHandler: (entry:String!, info:unz_file_info, current:Int, total:Int) {
    }){ (path:String!, succeeded:Bool, error:NSError!) in
    }

с ошибкой

…/ ViewController.swift: 45: 142: не удается конвертировать значение типа’ () — >
() ‘to expected argument type’ (запись: String!, информация: unz_file_info,
ток: Int, всего: Int) ‘(aka ‘ (ввод:
ImplicitlyUnwrappedOptional, info: unz_file_info_s, current:
Int, total: Int)’)

эта модификация, кажется, работает 🙂

    WPZipArchive.unzipFileAtPath(help, toDestination: temp, progressHandler: {(entry:String!, info:unz_file_info, current:Int, total:Int) in


    }){ (path:String!, succeeded:Bool, error:NSError!) in

    }

1 ответ

  1. Я не могу видеть имя функции здесь, но есть два обработчика (закрытия) хода выполнения и обработчик завершения. Я не уверен, который из них называет
    ((String!, unz_file_info, Int, Int)->Void)!

    func foo(completionHandler: (String!, unz_file_info, Int, Int)->Void){
        //do whatever you need to
        completionHandler("this is a string", <object of type unz_file_info>, 1, 2)
    }
    

    В качестве альтернативы, если вы пытаетесь использовать работу с данными из обработчика, вы бы реализовали его

    foo(completionHandler: { 
        (w:String!, x:unz_file_info, y:Int, z:Int) in
    
        print(w)
        print(x)
        print(y)
        print(z)
    })
    

    Вы бы поставили другие параметры на первое место, для получения дополнительной информации о закрытии см.:
    https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

    https://thatthinginswift.com/completion-handlers/