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

Why I can not change the value of global variable in WatchKit - swift?

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

这是我的第一个界面:

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


    }


}

但我收到一个错误:"Cannot assign to the result of this expression" 变量索引。我不知道为什么,我想知道该怎么做。我可以更改 IOS 应用程序的全局变量值。谢谢

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

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

The WKInterfaceController method initWithContext: has been deprecated. Please use awakeWithContext: instead. The designated initializer for WKInterfaceController is now init.

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

Initializer does not override a designated initializer from its superclass

...这表明您使用的 Xcode 6.2 版本早于 beta 3。因此,可能是早期 beta 中的错误导致了您的问题。强烈建议更新到今天的 beta4 版本并重新测试此问题。


在相关说明中,有许多程序员会争辩说使用全局变量是非常不可取的,而使用另一种方法,甚至是单例,是更可取的。如果您还没有对这场辩论形成意见,我只是提请您注意这一点。

我找到了解决办法。当你想在接口内部使用全局变量时,你必须将所有接口设置为相同的 "Target Membership"