我在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
我的问题是:即使在两种情况下问题都相同,为什么编译器错误也不同?
答案 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。