2015-05-04 2 views
3

Так что я пытался писать некоторые основные Свифта, и я написал:Swift не может ссылаться на «*» со списком аргументов типа «(Int, Int)»

func timesByHundred(d: Int) { 
    return d * 100 
} 

и компилятор сказал «не может ссылаться на '*' со списком аргументов типа '(Int, IntegerLiteralConvertible)' ". Так что я изменил его:

func timesByHundred(d: Int) { 
    let e: Int = 100 
    return d * e 
} 

и компилятор сказал «не может ссылаться на„*“со списком аргументов типа '(Int, Int)». Что я могу даже умножить, если не два ints? Здесь есть похожие вопросы, но у всех есть люди, которые пытаются работать на разных типах.

ответ

9

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

Реальная проблема заключается в том, что вы пропустили объявление типа возвращаемой функции, поэтому компилятор выводит Void и путается, когда пытается (и не может), чтобы найти подходящую для перегрузки *, который возвращает Void.

Измените функцию

func timesByHundred(d: Int) -> Int { 
    return d * 100 
} 
+0

ошибки компилятора Свифта действительно ужасно иногда. Это напоминает мне компиляторы C с середины 1980-х годов. Может быть, еще хуже, потому что ошибки иногда не просто расплывчаты, а совершенно ошибочны. –

+0

@ DuncanC Согласен. Основная проблема заключается в том, что она часто «слишком усердна», чтобы скомпилировать ее и выдает ошибку, когда она слишком глубока в выводе типа. –

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