#xcode #swift #xcode6
#xcode #swift #xcode6
Вопрос:
Согласно приведенным здесь документам: https://www.parse.com/docs/ios_guide#files-progress/iOS
это предлагаемый синтаксис для обработки сохранения файла с помощью блока завершения и progressBlock.
let str = "Working at Parse is great!"
let data = str.dataUsingEncoding(NSUTF8StringEncoding)
let file = PFFile(name:"resume.txt", data:data)
file.saveInBackgroundWithBlock {
(succeeded: Bool!, error: NSError!) -> Void in
// Handle success or failure here ...
}, progressBlock: {
(percentDone: Int) -> Void in
// Update your progress spinner here. percentDone will be between 0 and 100.
}
Однако XCode 6.2 выдает эту ошибку:
Последовательные инструкции в строке должны разделяться символом ‘;’
в этой строке:
}, progressBlock: {
Кто-нибудь знает, как правильно использовать progressBlock в этом сценарии?
Правка 1: Вот пример в Obj C:
NSData *data = [@"Working at Parse is great!" dataUsingEncoding:NSUTF8StringEncoding];
PFFile *file = [PFFile fileWithName:@"resume.txt" data:data];
[file saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
// Handle success or failure here ...
} progressBlock:^(int percentDone) {
// Update your progress spinner here. percentDone will be between 0 and 100.
}];
Правка 2:
Еще одна попытка, другая ошибка:
Правка 3: Исходный код, но с CInt в соответствии с предложением комментария
Комментарии:
1. Под Xcode 6.2 вы имеете в виду Xcode 6 beta 2?
Ответ №1:
Я определил класс в Objective C с сигнатурой метода:
- (void)saveInBackgroundWithBlock:(void(^)(BOOL succeeded, NSError *error))block progressBlock:(void(^)(int percentDone))progressBlock;
Я могу назвать это так из Swift:
let file = Test()
file.saveInBackgroundWithBlock({(success: Bool, error: NSError!) -> Void in
NSLog("1")
}, progressBlock: { (percentage: CInt) -> Void in
NSLog("2")
})
Комментарии:
1.
block:
может быть ненужным, поскольку это первый параметр.2. «Дополнительный аргумент ‘block’ в вызове»
3. Попробуйте без «блокировать:».
4. «Дополнительный аргумент в вызове»
5. Да. Единственное отличие в том, что я использовал
CInt
в качестве параметра процент выполнения.
Ответ №2:
Вам не хватает функции () для аргументов метода. Должно быть:
file.saveInBackgroundWithBlock({ (succeeded: Bool!, error: NSError!) -> Void in
// Handle success or failure here ...
}, progressBlock: {
(percentDone: Int) -> Void in
// Update your progress spinner here. percentDone will be between 0 and 100.
})
(Примечание: при вызове Objective-C из кода Swift Xcode преобразуется (при завершении кода) int
в CInt
и NSInteger
в Int
).
Комментарии:
1. Дополнительный аргумент ‘progressBlock’ в вызове