Невозможно вызвать 'схему' со списком аргументов типа '(String)' - PullRequest
0 голосов
/ 24 января 2019

У меня проблемы с преобразованием какой-либо Цели C в Swift.

iCloudSchemaDatabase *sdb = [self schema: @"33"];

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

var x = self.iCloudDBDelegate.schema("")

let sdb = self.iCloudDBDelegate.schema("33")

Схема взята из протокола Objective C

@protocol iCloudDBDelegate<NSObject>

@required
@property (weak,nonatomic) id<iCloudDBDelegate>iCloudDBDelegate;

@optional
-(iCloudSchemaDatabase*)schema:(NSString*)calledBy;

@end

Протокол добавил это в мой файл swift.

public var iCloudDBDelegate: iCloudDBDelegate!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы не можете вызвать метод schema без обработки:

  1. Случай, когда свойство делегата равно nil
  2. Случай, когда делегат не реализуетметод schema (поскольку это необязательно).

Изящная обработка обоих будет выглядеть примерно так:

//       because `schema` may not be implemented 
//                                            | 
//       because the delegate may be `nil`    | 
//                                    |       | 
//                                    v       v 
if let schemaResult = iCloudDBDelegate?.schema?("33") {
    // do something with the result of calling schema
} else {
    // either the delegate is `nil` or it doesn't implement `schema`.
}
0 голосов
/ 24 января 2019

Вот ответ, очень удивленный ...

let sdb = iCloudDBDelegate!.schema!("33")
...