Странное поведение с быстрым компилятором - программирование

Странное поведение с быстрым компилятором

У меня есть следующая функция в 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

Мой вопрос: почему ошибки компилятора различны, даже если проблема одинакова в обоих случаях?

4b9b3361

Ответ 1

value возвращает a UInt32. Переместите его в Int.

return Int(b[b.startIndex].value)

В качестве альтернативы вы можете вернуть функцию UInt32, как упоминает @GoodbyeStackOverflow.

func f() -> UInt32

Ответ 2

Верните это вместо:

return Int(b[b.startIndex].value)

Проблема в том, что значение b [...]. возвращает UInt32, который начинает Swift 1.2 больше не преобразуется в Int.