带有button.addTarget的“使用未解决的标识符'self'”

时间:2019-03-15 19:52:20

标签: ios swift

我是Swift的初学者。我创建了一个非常简单的按钮组件,但是当我尝试添加一个与按钮单击相关的函数时,出现错误:“使用未解析的标识符'self'。”这是我的代码:

const userBy = u => u.id == id;
const user = users.find(userBy);

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

如注释中所述,由于您不在类或结构中工作,因此在您的代码中没有self可以引用。您要做的第一件事是将这些内容包装到一个类中,并进行一些重组。我建议回到Xcode并执行以下操作:

  1. 文件>新建>游乐场...
  2. 选择iOS>单一视图
  3. 将此新游乐场保存在某个地方。

现在,您应该已经从模板创建了一个简单的Playground。在这里,您将看到如何创建一个从MyViewController继承的名为UIViewController的新类。在其中,您将找到一个名为loadView()的函数。然后,在该类之外,您将看到这个新的视图控制器的创建位置,并将其放置在PlaygroundPage当前的liveView中。

理想情况下,您应该能够单击代码视图底部的“播放”按钮,如果“助手”编辑器处于打开状态,您将看到一个带有“ Hello World!”的简单视图。标签位于视图中心。 (辅助按钮是带有两个互锁圆的按钮。)

Assistant Editor button

假设它可以运行并为您工作,那么我建议您开始重新添加代码,并尝试遵循模板中的模式设置。将设置视图的代码放在loadView()函数中,然后将ButtonClicked()函数移到该函数之外,但仍在该类之内。

进行一些修改,您应该能够启动并运行,并开始使用Swift。例如,这是您的Playground代码的有效版本:

    //: A UIKit based Playground for presenting user interface

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    override func loadView() {

        let containerView = UIView (frame: CGRect(x: 0, y: 0, width: 600, height: 600))
        containerView.backgroundColor = UIColor.blue

        let button = UIButton (frame: CGRect(x: 100, y: 100, width: 200, height: 200))
        button.backgroundColor = UIColor.yellow
        button.setTitle("Test Button", for: .normal)
        button.setTitleColor(.red, for: .normal)
        button.layer.cornerRadius = 10

        button.addTarget(self, action: #selector(ButtonClicked), for: .touchUpInside)

        containerView.addSubview(button)

        self.view = containerView
    }

    @objc func ButtonClicked(_ sender: UIButton) {
        print("ButtonClicked")
    }
}

PlaygroundPage.current.liveView = MyViewController()

玩得开心,花一些时间在《 Swift编程指南》上,一切很快就会开始变得有意义。