【发布时间】:2015-05-19 19:36:45
【问题描述】:
我在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
我的问题是:为什么即使两种情况下的问题相同,编译器错误也会不同?
【问题讨论】:
-
这可能只是一个编译器错误。如果将其拆分为
let u = b[b.startIndex] ; return u.value,则会收到“正确”错误消息“UInt32 不可转换为 Int”。 -
同意,编译器并不总是提供正确的错误消息,但原因很明显是差异。 UInt32 和 Int 之间
标签: swift compiler-errors