修改 Swift 中 NSTextField 的 stringValue
Modify stringValue of NSTextField in Swift
我试图通过更改来自 AppDelegate
的 stringValue
来更改 ViewController
中 NSTextField
的内容,但它给了我一个错误。
AppDelegate
中的代码是:
class AppDelegate: NSObject, NSApplicationDelegate {
var consoleOutput:String? = "Console Output"
func executeCommand(command: String, args: [String]) -> String {
let task = NSTask()
task.launchPath = command
task.arguments = args
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output:String = NSString(data: data, encoding: NSUTF8StringEncoding)!
consoleOutput = output
return output
}
}
它是从 ViewController
:
调用的
var myDelegate = NSApplication.sharedApplication().delegate! as AppDelegate
而 NSTextField
是之前创建的 IBOutlet
:
@IBOutlet weak var outputText: NSTextField!
稍后尝试修改:
outputText.stringValue = myDelegate.consoleOutput!
但我得到的只是
fatal error: unexpectedly found nil while unwrapping an Optional value
我做错了什么?
consoleOuput
被声明为可选 (?
),并且可能包含 nil
。尽管如此,您还是强制展开它 (!
) 而不是检查 nil
。这就是你"fatal error"的原因。任何时候你强行打开一个可选的,你都有这个错误的风险。
你可以试试这样的东西:
outputText.stringValue = myDelegate.consoleOutput ?? ""
这将尝试解包 myDelegate.consoleOutput
,但如果它不能(因为它是 nil
),它只会将空字符串分配给 outputText.stringValue
.
??
被称为 "Nil Coalescing Operator"。
尝试将此行:let output:String = NSString(data: data, encoding: NSUTF8StringEncoding)!
设置为:let output: String = "Test"
如果这消除了错误,那么您知道 NSString(data: data, encoding: NSUTF8StringEncoding)
正在返回 nil,因此数据管道有问题。
我试图通过更改来自 AppDelegate
的 stringValue
来更改 ViewController
中 NSTextField
的内容,但它给了我一个错误。
AppDelegate
中的代码是:
class AppDelegate: NSObject, NSApplicationDelegate {
var consoleOutput:String? = "Console Output"
func executeCommand(command: String, args: [String]) -> String {
let task = NSTask()
task.launchPath = command
task.arguments = args
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output:String = NSString(data: data, encoding: NSUTF8StringEncoding)!
consoleOutput = output
return output
}
}
它是从 ViewController
:
var myDelegate = NSApplication.sharedApplication().delegate! as AppDelegate
而 NSTextField
是之前创建的 IBOutlet
:
@IBOutlet weak var outputText: NSTextField!
稍后尝试修改:
outputText.stringValue = myDelegate.consoleOutput!
但我得到的只是
fatal error: unexpectedly found nil while unwrapping an Optional value
我做错了什么?
consoleOuput
被声明为可选 (?
),并且可能包含 nil
。尽管如此,您还是强制展开它 (!
) 而不是检查 nil
。这就是你"fatal error"的原因。任何时候你强行打开一个可选的,你都有这个错误的风险。
你可以试试这样的东西:
outputText.stringValue = myDelegate.consoleOutput ?? ""
这将尝试解包 myDelegate.consoleOutput
,但如果它不能(因为它是 nil
),它只会将空字符串分配给 outputText.stringValue
.
??
被称为 "Nil Coalescing Operator"。
尝试将此行:let output:String = NSString(data: data, encoding: NSUTF8StringEncoding)!
设置为:let output: String = "Test"
如果这消除了错误,那么您知道 NSString(data: data, encoding: NSUTF8StringEncoding)
正在返回 nil,因此数据管道有问题。