Ответ 1
value
возвращает a UInt32
. Переместите его в Int
.
return Int(b[b.startIndex].value)
В качестве альтернативы вы можете вернуть функцию UInt32
, как упоминает @GoodbyeStackOverflow.
func f() -> UInt32
У меня есть следующая функция в swift:
func f() -> Int
{
let a = String("a")
let b = a.unicodeScalars
println(b[b.startIndex].value)
//return b[b.startIndex].value
return 1
}
Если я раскомментирую первый оператор return и прокомментирую второй, я получаю ошибку компилятора:
Не удалось найти значение члена
Почему это происходит, даже когда у меня есть доступ к этому члену в вызове функции println?
ИЗМЕНИТЬ
Чтобы сделать вопрос более понятным, рассмотрите следующий код:
struct point {
var x: UInt32
var y: UInt32
init (x: UInt32, y: UInt32) {
self.x = x
self.y = y
}
}
func f () -> Int {
var arr = [point(x: 0, y: 0)]
return arr[0].x
}
В этом случае ошибка компилятора:
UInt32 не конвертируется в Int
Мой вопрос: почему ошибки компилятора различны, даже если проблема одинакова в обоих случаях?
value
возвращает a UInt32
. Переместите его в Int
.
return Int(b[b.startIndex].value)
В качестве альтернативы вы можете вернуть функцию UInt32
, как упоминает @GoodbyeStackOverflow.
func f() -> UInt32
Верните это вместо:
return Int(b[b.startIndex].value)
Проблема в том, что значение b [...]. возвращает UInt32, который начинает Swift 1.2 больше не преобразуется в Int.