如何访问 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]