对于你来说,这是一个非常愚蠢的问题Swift专家:我如何在不同的函数中访问类的内部变量?这是一个例子:
class SomeClass {
var vc: NSString?
internal func defVC() {
if let vc = "hi" as? NSString {
println("Successfully defined vc as \(vc)")
}
}
internal func whatsVC() {
println(vc)
}
}
let hmm = SomeClass()
hmm.defVC() // 'Successfully defined vc as hi'
hmm.whatsVC() // 'nil'
我希望vc被定义为类hmm
的'hi',但事实并非如此。我可以进行哪些更改,以便vc
只能在类实例中访问,但可以访问该类实例中的所有内部函数?
谢谢!
答案 0 :(得分:2)
因为您没有为vc
属性分配任何值:
if let vc = "hi" as? NSString {
// vc is a local variable of type NSString
// you need to set the value for vc the instance property
self.vc = vc
}
另外,你应该使用Swift的原生String
,而不是ObjC的NSString
,除非你有充分的理由不这样做。
答案 1 :(得分:0)
var vc: NSString?
& if let vc = "hi" as? NSString
两个vc
都是不同的变量并占据不同的内存位置。 if let
始终创建一个新变量,具有自己的范围(来自if to {}
)。
在你的代码中:
var vc: NSString?
被声明为可选字符串但从未分配内存/值。
在if语句中,它创建新的常量变量,它不能将内存/值分配给var vc: NSString?
if let vc = "hi" as? NSString {
println("Successfully defined vc as \(vc)")
} // ends scope of `vc` declared with if statement
试试这个,看看:
class SomeClass {
var vc: NSString?
internal func defVC() {
if let vc = "hi" as? NSString {
self.vc = vc
println("vc = \(vc)") // result - vc = hi
println("self.vc = \(self.vc)") // result - vc = optional(hi)
}
}
internal func whatsVC() {
println(vc)
}
}
let hmm = SomeClass()
hmm.defVC() // result - vc = hi
hmm.whatsVC() // result - vc = optional(hi)