重命名 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 的新名称。
我不小心将我的视图控制器中的一个插座拼错了,运行 成了几个问题。当我手动尝试更正拼写错误时,我在 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 的新名称。