ios - IBAction 按钮具有相同的功能。是否可以重构?
问题描述
我正在学习 Swift,我现在正在制作井字游戏。这是游戏的图像,到目前为止一切正常。井字游戏的图像。但是,我想知道是否有办法重构代码。
我为每个按钮添加了一个盘子图像(所以你可以看到 3 X 3 个按钮),所以当用户点击按钮时,盘子图像变成苹果图像或菠萝图像。在下面的代码中,我为每个按钮创建了 IBAction(即 func plate1Pressed()),但每个 IBAction 都执行相同的函数,即changePlateImage(plate: sender)
. 到目前为止,我总共只有 9 个按钮,所以我可以做 9 次 IBAction 并放入changePlateImage(plate: sender)
它们,但是,我在想如果我必须制作更多像黑白棋这样的方形游戏,我必须制作 8 X 8 IBAction,这有点可怕……
那么有什么方法可以重构我的代码吗?而不是添加 IBActions 9 次并将相同的功能放入其中?
import UIKit
class GameScreenViewController: UIViewController {
var isPlayer1 = true
override func viewDidLoad() {
super.viewDidLoad()
}
// when player 1 taped a button, change isPlayer1 to flase
func displayHandPointer () {
// some codes here...
}
func chnagePlayerTurn () {
// some codes here...
}
func changePlateImage (plate: UIButton) {
let fruitImage = isPlayer1 ? K.Image.apple : K.Image.pineapple
plate.setImage(UIImage(named: fruitImage), for: .normal)
chnagePlayerTurn()
displayHandPointer()
}
//MARK: - IBA actions for board game
@IBAction func plate1Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate2Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate3Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate4Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate5Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate6Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate7Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate8Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
@IBAction func plate9Pressed(_ sender: UIButton) {
changePlateImage(plate: sender)
}
// and codes go on...
}
解决方案
推荐阅读
- windows - tvOS 13.4 上 HLS 直播 URL 的 AVPlayer 失败(适用于 tvOS 13.3)
- typescript - 从 Apollo 插件访问 graphql 解析器参数
- python - 在 RGB 图像上绘制多类语义分割透明覆盖
- python - 使用networkx创建邻接矩阵时遇到问题
- eclipse - eclipse step over 跳转到下一个断点
- java - JavaFX 在 TableView 中使用多个类?
- html - 实时加入 base64 .webm 视频块并无延迟或闪烁问题播放
- elasticsearch - 从 elasticsearch 获取 shingle 结果
- python - 是否可以延迟作为函数调用一部分的表达式的评估?
- c++ - 如何在 Microsoft Visual C++ 项目中添加箭头键作为修饰键