如何访问 WKitInterface 数组的计数和索引?
How to access count and index of WKitInterface array?
我正在将一些代码从较旧的 ViewController 移植到 WKInterfaceController,并且在访问 beatPatternsArray 的计数和索引时遇到困难。现在我只是想让自定义函数通过 4 种不同的心率 依次显示不同的心脏图像。到目前为止我做的一切都正确吗?
import WatchKit
import Foundation
struct BeatPattern {
var heartImage = WKInterfaceImage()
var description = "Normal"
var bpm = 80
var duration: Double {
return 60.0 / Double(bpm)
}
}
let redHeartFast = WKInterfaceImage()
let yellowHeartElevated = WKInterfaceImage()
let greenHeartNormal = WKInterfaceImage()
let purpleHeartSlow = WKInterfaceImage()
let blueHeartSedated = WKInterfaceImage()
class InterfaceController: WKInterfaceController {
@IBOutlet weak var heartSymbol: WKInterfaceImage!
// @IBOutlet weak var bpmLabel: WKInterfaceLabel!
var currentBeatPattern = BeatPattern()
var currentBeatPatternIndex = 0
var beatPatternsArray = [
BeatPattern(heartImage: redHeartFast, description: "Fast", bpm: 180),
BeatPattern(heartImage: yellowHeartElevated, description: "Elevated", bpm: 140),
BeatPattern(heartImage: greenHeartNormal, description: "Normal", bpm: 80),
BeatPattern(heartImage: purpleHeartSlow, description: "Slow", bpm: 55),
BeatPattern(heartImage: blueHeartSedated, description: "Sedated", bpm: 30)]
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
self.view.insertSubview(heartSymbol, atIndex: 1) // Error
}
override func willActivate() {
super.willActivate()
// iconLabel.frame = self.view.bounds // fix this, frame math definitely wont work.
//iconLabel.f
//iconLabel.textAlignment = .Center
//iconLabel.font = UIFont.boldSystemFontOfSize(132)
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
newBeat()
NSTimer.scheduledTimerWithTimeInterval(8,
target: self,
selector: Selector("newBeat"),
userInfo: nil,
repeats: true)
//beat()
}
func newBeat() {
if ++currentBeatPatternIndex == beatPatternsArray.count {
currentBeatPatternIndex = 0
}
currentBeatPattern = beatPatternsArray[currentBeatPatternIndex]
//bpmLabel.setText("\(currentBeatPattern.bpm)")
heartSymbol = currentBeatPattern.heartImage
}
您将 beatPatternsArray
声明为 WKInterfaceImage
,但它似乎是 BeatPattern
的数组。
您 可以 将其声明为 [BeatPattern]
而不是 WKInterfaceImage
,但是从您的初始化 Swift 可以推断出类型。所以只需使用:
var beatPatternsArray = [
BeatPattern(heartImage: yellowHeartFast, description: "Fast", bpm: 180),
BeatPattern(heartImage: redHeartNormal, description: "Normal", bpm: 80),
BeatPattern(heartImage: purpleHeartSlow, description: "Slow", bpm: 55),
BeatPattern(heartImage: blueHeartSedated, description: "Fast", bpm: 30)]
(没有 : WKInterfaceImage
)。
那么你就可以使用数组方法了:
let beatCount = beatPatternsArray.count
let beatCountWithCountFunction = count(beatPatternsArray)
let secondElement = beatPatternsArray[1]
我正在将一些代码从较旧的 ViewController 移植到 WKInterfaceController,并且在访问 beatPatternsArray 的计数和索引时遇到困难。现在我只是想让自定义函数通过 4 种不同的心率 依次显示不同的心脏图像。到目前为止我做的一切都正确吗?
import WatchKit
import Foundation
struct BeatPattern {
var heartImage = WKInterfaceImage()
var description = "Normal"
var bpm = 80
var duration: Double {
return 60.0 / Double(bpm)
}
}
let redHeartFast = WKInterfaceImage()
let yellowHeartElevated = WKInterfaceImage()
let greenHeartNormal = WKInterfaceImage()
let purpleHeartSlow = WKInterfaceImage()
let blueHeartSedated = WKInterfaceImage()
class InterfaceController: WKInterfaceController {
@IBOutlet weak var heartSymbol: WKInterfaceImage!
// @IBOutlet weak var bpmLabel: WKInterfaceLabel!
var currentBeatPattern = BeatPattern()
var currentBeatPatternIndex = 0
var beatPatternsArray = [
BeatPattern(heartImage: redHeartFast, description: "Fast", bpm: 180),
BeatPattern(heartImage: yellowHeartElevated, description: "Elevated", bpm: 140),
BeatPattern(heartImage: greenHeartNormal, description: "Normal", bpm: 80),
BeatPattern(heartImage: purpleHeartSlow, description: "Slow", bpm: 55),
BeatPattern(heartImage: blueHeartSedated, description: "Sedated", bpm: 30)]
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
self.view.insertSubview(heartSymbol, atIndex: 1) // Error
}
override func willActivate() {
super.willActivate()
// iconLabel.frame = self.view.bounds // fix this, frame math definitely wont work.
//iconLabel.f
//iconLabel.textAlignment = .Center
//iconLabel.font = UIFont.boldSystemFontOfSize(132)
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
newBeat()
NSTimer.scheduledTimerWithTimeInterval(8,
target: self,
selector: Selector("newBeat"),
userInfo: nil,
repeats: true)
//beat()
}
func newBeat() {
if ++currentBeatPatternIndex == beatPatternsArray.count {
currentBeatPatternIndex = 0
}
currentBeatPattern = beatPatternsArray[currentBeatPatternIndex]
//bpmLabel.setText("\(currentBeatPattern.bpm)")
heartSymbol = currentBeatPattern.heartImage
}
您将 beatPatternsArray
声明为 WKInterfaceImage
,但它似乎是 BeatPattern
的数组。
您 可以 将其声明为 [BeatPattern]
而不是 WKInterfaceImage
,但是从您的初始化 Swift 可以推断出类型。所以只需使用:
var beatPatternsArray = [
BeatPattern(heartImage: yellowHeartFast, description: "Fast", bpm: 180),
BeatPattern(heartImage: redHeartNormal, description: "Normal", bpm: 80),
BeatPattern(heartImage: purpleHeartSlow, description: "Slow", bpm: 55),
BeatPattern(heartImage: blueHeartSedated, description: "Fast", bpm: 30)]
(没有 : WKInterfaceImage
)。
那么你就可以使用数组方法了:
let beatCount = beatPatternsArray.count
let beatCountWithCountFunction = count(beatPatternsArray)
let secondElement = beatPatternsArray[1]