2015-01-18 3 views
0
func makeIncrementer() -> (Int -> Int) { 
    func addOne(number: Int) -> Int { 
     return 1 + number 
    } 
    return addOne 
} 

выше простой пример кода для функции, как в Swift типа первого класса теперь, когда я называю на вызов функции следующим образом:Тип «()» не соответствует протоколу «IntegerLiteralConvertible»

var increment = makeIncrementer() 
increment(7) 

он отлично дает ответ

Но из любопытства я попробовал прямой подход, т.е.

makeIncrementer(7) // error 

и это дает ошибку

почему это так ??? P.S. Я новичок в Swift

ответ

3

Вызов makeIncrementer() возвращает функцию, поэтому называть его вы передаете параметр во втором наборе скобок:

makeIncrementer()(7) 

Сообщение об ошибке дается, потому что Swift интерпретирует makeIncrementer(7), как 7 передается в makeIncrementer, который не принимает никаких параметров. Надеемся, что сообщения об ошибках Swift станут более дружелюбными в будущем. Хотя технически правильно, данное сообщение об ошибке приводит к большой путанице.

+0

избили меня :) – Abizern

+0

thanx для решения, с которым оно сработало :) (y) –

+0

Радость, пожалуйста, примите мой ответ, нажав на полый флажок рядом с ним, чтобы он стал зеленым. Благодарю. – vacawama

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