为什么我不能在WatchKit中更改全局变量的值 - swift?

时间:2015-01-13 07:51:42

标签: swift global-variables watchkit

我正在制作一个简单的WatchKit应用程序。我有一个golbal int变量,在第一个InterfaceController中值为0。

这是我的第一个界面:

import WatchKit
import Foundation
import UIKit

var index:Int = 0

class InterfaceController: WKInterfaceController {

    .....
}

在secondView接口中我想更改此全局变量的值:

import UIKit
import WatchKit

class secondInterfaceController: WKInterfaceController {


    override init(context: AnyObject?) {
        // Initialize variables here.
        super.init(context: context)

        // Configure interface objects here.
        NSLog("%@ init", self)

        println("index: \(index)")

        index = 2


    }


}

但我收到一个错误:“无法为变量索引分配此表达式的结果”。我不知道为什么,我想知道如何做到这一点。我可以为IOS的应用程序更改全局变量的值。感谢

2 个答案:

答案 0 :(得分:2)

我复制了您的代码以测试问题,打算测试潜在的解决方案。相反,我确认这个问题不可重现。

为了能够运行代码,我不得不将其更改为override func awakeWithContext(context: AnyObject?)。从今天发布的beta3和beta4的发行说明中:

  

WKInterfaceController方法initWithContext:已被弃用。请使用awakeWithContext:而不是。 WKInterfaceController的指定初始化程序现在是init。

鉴于您的代码使用init(context: AnyObject?),并且您没有收到此错误消息:

  

初始化程序不会覆盖其超类

中的指定初始值设定项

...它表示您使用的是早于测试版3的Xcode 6.2版本。因此,早期测试版中可能存在导致您出现问题的错误。更新到今天的beta4版本并重新测试这个问题是非常可取的。


在相关的说明中,有许多程序员认为全局变量的使用是非常不受欢迎的,并且使用另一种方法,甚至是单例,更可取。我只是提请你注意,如果你还没有就这场辩论形成意见。

答案 1 :(得分:0)

我找到了解决方案。如果要在接口内部使用全局变量,则必须将所有接口设置为相同的"目标成员资格"