使用swift编译器的奇怪行为

时间:2015-05-19 19:36:45

标签: swift compiler-errors

我在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

我的问题是:即使在两种情况下问题都相同,为什么编译器错误也不同?

2 个答案:

答案 0 :(得分:2)

value返回UInt32。将其投放到Int

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

或者,您可以让函数返回UInt32作为@GoodbyeStackOverflow提及。

func f() -> UInt32

答案 1 :(得分:0)

改为退货:

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

问题是b [...]。值返回一个UInt32,启动Swift 1.2不再转换为Int。