Содержит, где синтаксис отличается, когда помещается в собственный метод в Swift - PullRequest
0 голосов
/ 22 октября 2018

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

Этот код хорошо работает внутри более длинного метода

let aboutLocation = self.locationWords.contains(where: {$0.caseInsensitiveCompare((newmessage)!) == .orderedSame})

if (aboutLocation) {
    self.startLocationServices()
}

Когда я пытаюсьчтобы поместить код в свой собственный метод следующим образом, он выдает сообщение об ошибке: При вызове указывается посторонний аргумент 'where' и предлагает удалить слово.

func startLocationServicesIfLocation(newmessage:String){
    let aboutLocation = self.locationWords.contains(where: {$0.caseInsensitiveCompare((newmessage)!) == .orderedSame})

    if (aboutLocation) {
        self.startLocationServices()
    }
}

Почему в одном методе будет иначе, чем в другом

1 Ответ

0 голосов
/ 22 октября 2018

Ошибка вводит в заблуждение.

В функции параметр newmessage не является обязательным, поэтому вы должны удалить восклицательный знак (и заключающие его скобки - в любом случае также вокруг условия if - в любом случае).

let aboutLocation = self.locationWords.contains(where: {$0.caseInsensitiveCompare(newmessage) == .orderedSame})
if aboutLocation { ...

Но вы действительно можете опустить метку параметра where, используя синтаксис конечного замыкания

let aboutLocation = locationWords.contains{ $0.caseInsensitiveCompare(newmessage) == .orderedSame }
...