Swift 将全局变量传递给@IBAction 函数?

标签 swift

我试图让用户通过单击应用程序菜单栏上的文件来选择要打开的 .png 文件,然后以相同的方式打开 Microsoft Word 文件。

问题是 @IBAction func SelectFileToOpen(sender: NSMenuItem) {} 无法访问全局变量或设置它们,并且似乎完全独立于代码的其余部分

这是我的代码,旨在演示该方法如何无法读取全局变量:

//
//  AppDelegate.swift
//  Swift class based
//
//  Created by ethan sanford on 2015-01-16.
//  Copyright (c) 2015 ethan D sanford. All rights reserved.
//

import Cocoa

@NSApplicationMain

class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }

    var myURL=NSURL(fileURLWithPath: "")

    @IBAction func btnConcat(sender: NSButton) {
        myURL = NSURL(fileURLWithPath: "///Users/ethansanford/Desktop/BigWriting.png")
        var say_something = "set URL button clicked"
        print(say_something);

        print(myURL)
    }

    @IBAction func SelectFileToOpen(sender: NSMenuItem) {
        var say_something = "Menu bar, file-open clicked:"
        print(say_something);
        print(myURL);

    }

    @IBAction func communicate(sender: AnyObject) {
        var say_something = "communicate button clicked:"
        print(say_something);
        print(myURL);

    }
}

这是从这段代码生成的 NSlog。请注意,URL 按钮和通信按钮方法可以共享 myURL 变量,但文件打开按钮似乎无法:

URL button clickedOptional(file://///Users/ethansanford/Desktop/BigWriting.png)
communicate button clicked:Optional(file://///Users/ethansanford/Desktop/BigWriting.png)Menu bar
 file-open clicked:nil
communicate button clicked:Optional(file://///Users/ethansanford/Desktop/BigWriting.png)

我需要 myURL 变量才能在所有三种方法中使用。这对于以后我需要这些方法进行通信时是必需的,这样我就可以接受用户的选择并将其很好地显示在图像中。感谢您的任何帮助,您可以提供。我相信问题出在菜单栏中的文件按钮上。

任何人都可以向我解释如何解决这个问题吗?

最佳答案

在您的代码中,myURL 是将在应用委托(delegate)中创建的实例变量。我想知道您是否过度简化了代码示例。

虽然说过它应该可以从应用程序委托(delegate)的实例方法访问,但是在 AppDelegate 中而不是在 UI 代码中使用 IBAction 方法似乎是一个奇怪的选择(我从未尝试过)。

关于Swift 将全局变量传递给@IBAction 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014589/

相关文章:

ios - 处理大量的 Swift 类

ios - 在 swift Xctest 中测试 Firebase 类

ios - Swift - 播放声音时出现错误 "fatal error: unexpectedly found nil while unwrapping an Optional value"

ios - 如何更改 UIPageViewControllerOptionInterPageSpacingKey 的值?

ios - ResearchKit 步行任务不返回心率数据

swift - 将项目从 firebase 加载到 pickerview 的问题

ios - 由于信号段错误 11 Xcode 9 - iOS 模拟器,命令失败

swift - 如何在开始编辑时清除所有 TextField 或在 Swift 3 中选择 TextField?

ios - 如何在单元格中按下按钮时将数据从一个 Tableview 传递到另一个 Tableview?

ios - 在 AVPlayer 中循环远程获取视频是否会导致重新下载?