2016-04-26 2 views
-1

Я использую следующий класс, и у него есть метод для извлечения всех писем внутри строки, я новичок в swift и даю мне ошибку. Может кто-нибудь объяснить, почему эта ошибка наступает.? Благодаря«Общий параметр« Элемент »не может быть выведен« ошибка в быстром ...?

import UIKit 
import Foundation 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

     if let results = extractEmailFromString("[email protected] heyyyyy cool [email protected]") { 
      print(results) 
     } 
    } 

    func extractEmailFromString(string:NSString) -> [String]? { 
     let pattern = "(\\+[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)" 


     let regexp = try! NSRegularExpression(pattern: pattern, 
               options: [.CaseInsensitive]) 


     var results = [String]() 
     regexp.enumerateMatchesInString(string as String, options: NSMatchingOptions(rawValue: 0), range: NSRange(location: 0, length:string.length), usingBlock: { (result: NSTextCheckingResult!, _, _) in 
      results.append(string.substringWithRange(result.range)) 
     }) 

     return results 
    } 
} 

enter image description here

+1

В чем вопрос? – matt

+0

@matt Извините, вопрос был утерян при отправке, я отредактировал вопрос. –

ответ

1

Итак, ваш блок просить NSTextCheckingResult!, но подпись ожидает NSTextCheckingResult?. Если вы меняете блок на usingBlock: { (result: NSTextCheckingResult?, _, _) in, это заставляет замолчать компилятор.

Я понятия не имею, почему компилятор дает эту ошибку.

+0

Это именно то, что вы дали: подпись не соответствует тому, что написал OP. На данный момент должно быть несколько случаев или вообще нет случаев, когда неявно разворачивается необязательный сигнал из Cocoa. API-интерфейсы Cocoa отмечены так, что либо вещь не является необязательной, либо, если она может быть равна нулю, это обычная опция (с вопросительным знаком, а не восклицательным знаком). – matt

+0

@matt: Да, но эта ошибка, похоже, не применима здесь. Правильная ошибка связана с несоответствием типа, а не с общим выводом параметров. –

+0

Вы говорите, что удивляетесь, что компилятор Swift дал вводящее в заблуждение описание проблемы? Вы не должны были использовать Свифт очень долго, если вы такой наивный! Такое происходит всегда. - Конкретная проблема заключается в том, что при не соответствующем типе и отсутствии других типов (OP полностью закрыл их) Swift не распознает эту анонимную функцию как совпадающую с ожидаемым типом блока для этого метода вообще. Таким образом, типы анонимной функции не выводятся. – matt

Смежные вопросы