Alb*_*ini 21 methods class swift
我有两个快速文件:
main.swift 和 view.swift
在main.swift中,我有一个variable (Int)初始设置为0.
随着IBACtion我设置variable要10和一切正常.
但是,如果我尝试访问该variable从view.swift,用一个简单的调用,比如main().getValue(),我总是得到0,而不是10即使变量已经改变了它在main.swift值.
该方法getValue()在main.swift看起来是这样的:
func getValue() -> Int {
return variable
}
Run Code Online (Sandbox Code Playgroud)
编辑
这是代码(翻译自意大利语:D)
import Cocoa
class Main: NSObject {
var variable: Int = 0
func getValue() -> Int {
return variable
}
@IBAction func updateVar(sender: AnyObject!) {
variable = 10
}
}
Run Code Online (Sandbox Code Playgroud)
class View: NSView {
override func drawRect(dirtyRect: NSRect) {
println(Main().getValue()) //Returns always 0
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢Alberto
Kok*_*oko 38
我通过创建一个可供所有视图访问的通用主类来解决这个问题.创建一个空的swift文件,将其命名为"global.swift"并将其包含在您的项目中:
global.swift:
class Main {
var name:String
init(name:String) {
self.name = name
}
}
var mainInstance = Main(name:"My Global Class")
Run Code Online (Sandbox Code Playgroud)
您现在可以从所有视图控制器访问此mainInstance,名称将始终为"我的全局类".viewController的示例:
的viewController:
override func viewDidLoad() {
super.viewDidLoad()
println("global class is " + mainInstance.name)
}
Run Code Online (Sandbox Code Playgroud)
dre*_*wag 17
Swift中的"files"和"classes"之间有一个重要的区别.文件与类没有任何关系.您可以在一个文件中定义1000个类,在1000个文件中定义1个类(使用扩展名).数据保存在类的实例中,而不是文件本身.
所以现在问题.通过调用Main()要创建一个全新的实例中的Main有没有关系,你已经连上你的XIB文件的实例类.这就是价值作为默认值出现的原因.
您需要做的是找到一种方法来获取与 Xib中的实例相同的实例的引用.在不了解应用程序的更多架构的情况下,我很难就此做出建议.
有人想到,你可以Main使用你的IBOutlet在你的Xib中添加对你的实例的引用View.然后你可以简单地做self.main.getValue(),它将在正确的实例上调用.
| 归档时间: |
|
| 查看次数: |
52949 次 |
| 最近记录: |