2017-01-03 7 views
1

Я хочу использовать класс CIDetector для обнаружения прямоугольников, но я не могу создать экземпляр этого класса. Я получаю сообщение об ошибке:iOS Swift: CIDetectorTypeRectangle не конвертируется

'(ofType: String, context: CIContext?, options: [String : AnyObject]?) -> CIDetector' is not convertible to '(ofType: String, context: CIContext?, options: [String : AnyObject]?) -> CIDetector?' 

Я использую этот код:

private lazy var rectangleDetector: CIDetector? = { 
    let options: [String : AnyObject] = [ 
     CIDetectorAccuracy: CIDetectorAccuracyHigh, 
     CIDetectorMinFeatureSize: 0.5, 
     CIDetectorAspectRatio: 0.7 
    ] 

    return CIDetector(ofType: CIDetectorTypeRectangle, context: nil, options: options) 
}() 

Я использую XCode 8.2.1 и Swift 2.3. Не было никаких ошибок, когда я использовал его в XCode 7 с Swift 2.2. Кто-нибудь знает, что здесь не так?

+0

Вы уверены, что используете Swift 2.3 или Swift 3? –

+0

Да, я использую Swift 2.3, и я установил «Использовать устаревшую версию языка Swift» в YES. –

+0

Попробуйте очистить сборку, потому что для меня она работает с Xcode 8 и Swift 2.3. Или если все еще не работает, добавьте еще код с ним. –

ответ

1

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

guard let detector = CIDetector(ofType: CIDetectorTypeRectangle, context: nil, options: nil) else { 
    return //Or better yet throw error 
} 

//Do something with detector 
+0

Я пробовал, это не помогло. –