Swift Значение типа "ViewController" не имеет члена с именем "Self" ошибка

pdenlinger спросил: 14 ноября 2017 в 05:33 в: ios

Я пытаюсь понять замыкания задней кромки в Swift, и этот код выдает мне ошибку в promptForAnswer(). В частности, я получаю ошибку XCode, которая говорит:

У значения типа"ViewController" нет члена с именем"Self"

... даже при том, что Я объявил это в коде.

Может кто-нибудь объяснить, что не так?

import UIKit
import GameplayKitvar allWords = [String]()
var usedWords = [String]()class ViewController: UITableViewController {    override func viewDidLoad() {
        super.viewDidLoad()        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(promptForAnswer))        if let startWordsPath = Bundle.main.path(forResource: "start", ofType: "txt") {
            if let startWords = try? String(contentsOfFile: startWordsPath) {
                allWords = startWords.components(separatedBy: "\n")
            }
        } else {
            allWords = ["silkworm"]
        }
        startGame()
    }    @objc func promptForAnswer() {
        let ac = UIAlertController(title: "Enter answer", message: nil, preferredStyle: .alert)
        ac.addTextField()        let submitAction = UIAlertAction(title: "Submit", style: .default) {
            [unowned self, ac] (action: UIAlertAction) in
            let answer = ac.textFields![0]
            self.submit(answer: answer.text!) // Value of type "ViewController" has no member type "self"
        }        ac.addAction(submitAction)
        present(ac, animated: true)
    }    func startGame() {
        allWords = GKRandomSource.sharedRandom().arrayByShufflingObjects(in: allWords) as! [String]
        title = allWords[0]
        usedWords.removeAll(keepingCapacity: true)
        tableView.reloadData()
    }    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return usedWords.count
    }    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Word", for: indexPath)
        cell.textLabel?.text = usedWords[indexPath.row]
        return cell
    }    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

0 ответов