重命名 Swift 中的插座

Renaming an outlet in Swift

我不小心将我的视图控制器中的一个插座拼错了,运行 成了几个问题。当我手动尝试更正拼写错误时,我在 AppDelegate 内在运行时停止,我看到消息

Thread 1: signal SIGABRT

突出显示代码块的开头:

class AppDelegate: UIResponder, UIApplicationDelegate {
  ...
}

我发现要在 Objective-C 中解决此问题,您需要右键单击插座的原始名称和 "Refactor => Rename",但不幸的是我收到消息:

Xcode can only refactor C and Objective-C code

视图控制器

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var billTextField: UITextField!

    @IBOutlet weak var tipRateSegmentedControl: UISegmentedControl!

    @IBOutlet weak var tiLabel: UILabel! // Variable name should be "tipLabel"

    @IBAction func calculateTapped(sender: AnyObject) {
        var userInput = billTextField.text as NSString
        var totalBill: Float = userInput.floatValue
        var index: Int = tipRateSegmentedControl.selectedSegmentIndex
        var tipRate: Float = 0.15

        if index == 0 {
            tipRate == 0.15
        } else if index == 1 {
            tipRate = 0.20
        } else {
            tipRate = 0.25
        }

        var tip: Float = totalBill * tipRate

        tipLabel.text = "$\(tip)"
    }
}

对于 swift,这种重构还不起作用。您必须更改插座的名称,然后在界面生成器中删除并重置连接。

更新:

右键单击要重命名的 IBOutlet,删除引用插座,然后重新分配它,但您不必对代码执行任何操作。

编辑:由于Xcode9,有一个重构函数;新的好方法是


自 Xcode 6 起,您可以直接在查找导航器 (Cmd+3) 中查找出口名称,它会显示您的代码中出现的情况以及 在您的 xib 和情节提要中。它也适用于动作。

只需在“查找”导航器中搜索名称即可。

您可以看到第二个结果是故事板中的引用。您可以通过点击每个结果并按替换来一一替换,或者您可以直接全部替换,如果您确定不会破坏任何东西。

重构 > 重命名...

Xcode 9 有许多编辑器改进,包括从一个地方更改代码和情节提要中的 outlet/action 名称的功能。

在下面的示例 Swift 代码中,右键单击 btnRequestCode,从弹出菜单 select "Refactor > Rename...",更改 outlet/action 名称,Xcode 也在 Storyboard 中更改它。

@IBOutlet weak var btnRequestCode: UIButton!

我喜欢通过打开 Storyboard 作为源代码并编辑 XML-like 标签来解决这种情况。

右键单击 .storyboard 文件并选择 "Open As"。搜索仍然在故事板中设置但不再与视图控制器中重命名的 method/outlet 对象匹配的旧出口(或 action/method)名称。编辑 Storyboard 中的 Xml 标签,在视图控制器中为其指定 outlet 或 action 的新名称。