Swift 访问不同函数中的内部变量

Swift 访问不同函数中的内部变量,swift,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() { pri

对于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在这个类中被定义为“hi”,但事实并非如此。我可以做哪些更改,使vc只能在类实例中访问,但该类实例中的所有内部函数都可以访问


谢谢

因为您没有为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的原生字符串,而不是ObjC的NSString,除非您有充分的理由这样做。

var vc:NSString?&如果让vc=hi as?NSString

两个vc都是不同的变量,占用不同的内存位置。if让我们始终创建一个新变量,其作用域从if到{}

在代码中: var-vc:NSString?声明为可选字符串,但从未分配内存/值。 而在if语句中,它创建了新的常量变量,该变量不能将内存/值分配给var vc:NSString

试试这个,看看:

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)

如果让vc=hi,编译器怎么能让你通过呢?对不起,是hi as?NSString。我会修好的!这个修正不会改变任何事情。你从不给你的vc属性赋值。您只为名为vc的局部变量赋值。您没有设置vc实例变量;if-let语句将该值赋给名为vc的新变量,该变量会隐藏实例变量。啊!我昨天才开始学斯威夫特,我是一个十足的白痴,非常感谢。一旦它允许,我会检查它是否正确。我实际上正在尝试实现一个用ObjC编写的SDK,我对Swift项目中的任何内容都不了解。字符串属性在Swift中自动桥接为字符串。最好通过按住选项并单击实例属性来检查vc的真正类型,并使用print而不是println,后者在Swift 2中消失了。
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)