为什么我不能更改 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"
我正在制作一个简单的 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"