将值从 inputField 传递到 NSTextField

Passing a value from inputField to NSTextField

我想通过按下按钮将字符串值从一个 NSTextField 传递到另一个 NSTextField。我用这个for-in loop。我需要将值从 inputField 传递到 visibleText1,然后传递到 visibleText2,再传递到 visibleText3。但是没用。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var inputField: NSTextField!
    @IBOutlet weak var visibleText1: NSTextField!
    @IBOutlet weak var visibleText2: NSTextField!
    @IBOutlet weak var visibleText3: NSTextField!

    func applicationDidFinishLaunching(aNotification: NSNotification) { }
    func applicationWillTerminate(aNotification: NSNotification) { }

    @IBAction func applyButton(sender: AnyObject) {      
        for u in (visibleText1.stringValue...visibleText3.stringValue) {
            visibleText.stringValue[u] = inputField.stringValue
            inputField.stringValue = ""
        }
    }
}

Xcode 给我一个错误:

// Type 'ClosedInterval<String>' does not conform to protocol 'SequenceType' 

怎么做才对?

这有几处错误,但我将从起作用的地方开始:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var inputField: NSTextField!
    @IBOutlet weak var visibleText1: NSTextField!
    @IBOutlet weak var visibleText2: NSTextField!
    @IBOutlet weak var visibleText3: NSTextField!

    func applicationDidFinishLaunching(aNotification: NSNotification) { }
    func applicationWillTerminate(aNotification: NSNotification) { }

    @IBAction func applyButton(sender: AnyObject) {      
        for u in [visibleText1, visibleText2, visibleText3] {
            u.stringValue = inputField.stringValue
        }
    }
}

那么原版有什么问题?

1) 您的 (visibleText1.stringValue...visibleText3.stringValue)String ... String 类型,这不是您想要的。您需要有一个 NSTextField 数组。

2) visibleText.stringValue[u] 甚至都不是东西。没有变量 visibleString,即使它是一个 NSTextField - 我认为这是你想要的,它的 .stringValue 是一个 String,而不是一个数组。

3) 你在 for 循环中设置 inputField.stringValue = "" 做什么?如果您的构造有效,则只会设置第一个字段。

4) 不是错误,但为什么你在 NSApplicationDelegate 而不是 viewController 中执行所有这些操作?

不,你不能那样做,因为你不能为不同的文本字段创建一系列字符串值。

您可以制作一个包含三个字段的数组并枚举:

@IBAction func applyButton(sender: AnyObject) {      
    for field in [visibleText1, visibleText2, visibleText3] {
        field.stringValue = inputField.stringValue
    }
    inputField.stringValue = ""
}

或使用forEach函数

@IBAction func applyButton(sender: AnyObject) {      
    [visibleText1, visibleText2, visibleText3].forEach {
        [=11=].stringValue = inputField.stringValue
    }
    inputField.stringValue = ""
}

在重复循环中重置 inputField 将始终在第一次迭代后应用空字符串。