Macos 将变量传递给NSView

Macos 将变量传递给NSView,macos,class,swift3,Macos,Class,Swift3,我试图将数组的内容传递给NSView,以显示矩形x位置。 我已经建立了一个使用随机数和一个按钮的版本,并将代码减少到最低限度,希望它更具可读性。我尝试将数组创建为全局变量。我还试着从这个答案中反转代码。我插入了一条注释:“这就是我想要实现的”,这解释了我想要实现的。 我希望有人能帮忙?谢谢 Swift 3 Xcode 8.1 OSX Mac操作系统非iOS // // MainWindowController.swift import Cocoa class MainWindowContro

我试图将数组的内容传递给NSView,以显示矩形x位置。 我已经建立了一个使用随机数和一个按钮的版本,并将代码减少到最低限度,希望它更具可读性。我尝试将数组创建为全局变量。我还试着从这个答案中反转代码。我插入了一条注释:“这就是我想要实现的”,这解释了我想要实现的。 我希望有人能帮忙?谢谢

Swift 3 Xcode 8.1 OSX Mac操作系统非iOS

//
//  MainWindowController.swift

import Cocoa
class MainWindowController: NSWindowController {
    @IBOutlet weak var myView: NSView!
    var myArray = [Int]()
    override func windowDidLoad() {
        super.windowDidLoad()
        //just for testing
        for i in 0..<6{
            myArray.append(i*10)
        }
    }//EO Overide

    //just for testing
    @IBAction func myButton(_ sender: AnyObject) {
        myFunc()
    }

    func myFunc(){
        for i in 0..<6{
            let diceRoll = Int(arc4random_uniform(6) + 1)
            myArray[i]=diceRoll * 10
        }

        myView.needsDisplay = true

    }//EO myFunc
}//EnD oF thE wORld



class myGUI: NSView {

    override func draw(_ dirtyRect: NSRect) {

        for i in..<6{
   let fromArray = myArray[i]
            let box1 = NSMakeRect(CGFloat(fromArray),0,4,60)//This is what i want to do
            let box1Color = NSColor(red: 0.4, green: 0.4, blue: 0.4, alpha: 1.0)
            let box1Path: NSBezierPath = NSBezierPath(rect: box1)
            box1Color.set()
            box1Path.fill()

        }//EO For

    }}
//
//MainWindowController.swift
进口可可
类MainWindowController:NSWindowController{
@ibvar myView:NSView!
var myArray=[Int]()
重写函数windowDidLoad(){
super.windowDidLoad()
//只是为了测试

对于0中的i..由于您对
NSView
的子类有很强的引用,只需添加一个属性:

class myGUI: NSView {

    var xPosArray = [Int]()      

    override func draw(_ dirtyRect: NSRect) {
        for xPos  in  xPosArray { // please avoid ugly C-style index based loops
           let box1 = NSMakeRect(CGFloat(xPos), 0, 4, 60)
    ...
只需在视图控制器中进行设置

func myFunc(){
    for i in 0..<6 {
        let diceRoll = Int(arc4random_uniform(6) + 1)
        myArray[i]=diceRoll * 10
    }
    myView.xPosArray = myArray
    myView.needsDisplay = true
 }
func myFunc(){

对于0中的i..我注意到了类名和丑陋的循环,我从不知道存在循环样式(自学),我收到了错误。“类型为'NSView'的值没有成员'array'”感谢Interface Builder您必须将自定义视图的类设置为
myGUI
我已经将视图的类设置为myGUI仍然没有luckI知道部件正在工作使用MyFunc中的全局变量集对其进行测试另外您必须更改此行:
@IBOutlet弱var myView:myGUI!
在这种情况下,不推荐也不需要。