私はクロージャがデータをキャプチャするという概念を理解していません。データが破壊されない方法を示すクロージャを使用してサンプルコードを書くことはできますか?私は既にAppleのドキュメントを読んでいます。そして、また、どのように...閉鎖の違いを作る「所有されていない」と「弱い私たちは、明示的に物事を割り当て解除されていない場合は、ここで所有されていない作業を行う方法をクロージャはどのようにデータをキャプチャしますか?
class TableViewController: UITableViewController {
var allWords = [String]()
var usedWords = [String]()
override func viewDidLoad() {
super.viewDidLoad()
if let allWordsPath = Bundle.main.path(forResource: "start", ofType: "txt"){
if let startWords = try? String(contentsOfFile: allWordsPath){
allWords = startWords.components(separatedBy: "\n")
}else{
allWords = ["Cake"]
}
startGame()
}
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Make Word", style: .plain, target: self, action: #selector (makeWord))
}
func startGame(){
allWords = GKRandomSource.sharedRandom().arrayByShufflingObjects(in: allWords) as! [String]
title = allWords[0]
usedWords.removeAll(keepingCapacity: true)
}
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
}
func makeWord() {
let ac = UIAlertController(title: "Add Word", message: nil, preferredStyle: .alert)
ac.addTextField(configurationHandler: nil)
let submit = UIAlertAction(title: "Submit", style: .default){ [unowned self,ac]
(action: UIAlertAction!) in
let answer = ac.textFields?[0]
self.submit(answer: (answer?.text)!)
}
ac.addAction(submit)
present(ac,animated: true)
}
var number = 10
func submit(answer: String){
usedWords.append(answer)
tableView.reloadData()
}
..
http://alisoftware.github.io/swift/closures/2016/07/25/closure-capture-1/ – Pochi
私は彼の例を理解していません。 –
私の答えをチェックしてください。 Btwクロージャでは、データが破壊されることはありません。彼らは単に、データの処理方法と破壊された場合の対処方法を指定することができます。その変数が "弱い"として設定されていることを完全に有効にして、クロージャ内でそれを単にチェックします。 – Pochi