访问不同功能的内部变量

时间:2017-07-21 17:03:34

标签: swift

对于你来说,这是一个非常愚蠢的问题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只能在类实例中访问,但可以访问该类实例中的所有内部函数?

谢谢!

2 个答案:

答案 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)