Я изучаю Udemy по разработке приложений и работаю над игрой Tic Tac Toe. Я абсолютно люблю свое время с разработкой приложений и закодировал на нескольких других языках за пределами Swift. Моя проблема возникает, когда я разрешаю пользователю вводить его / ее имя на одном экране (показанном ниже на первом изображении), и когда нажимается кнопка «Воспроизвести», он сохраняет имена, введенные в текстовые поля, и объединяет их с помощью «» s включить "второй контроллер вида, чтобы указать, какие пользователи включили его. В конце игры я также хочу показать, кто победитель по имени. Если я выясню, как использовать пользовательские данные из первого контроллера представления во втором, я смогу разобраться с частью кодирования самостоятельно. Я ссылался: Доступ к переменным из другого ViewController в Swift , но я до сих пор не понимаю, как это работает, или если это та же проблема, что у меня возникла. Я приложу изображение обоих контроллеров представления ниже и их код. Спасибо за помощь в продвижении!
оба контроллера вида
код для контроллера представления, который принимает пользовательский ввод:
// MainViewController.swift
// Tic Tac Toe
// main menu/player select
import UIKit
class MainViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var playerOneName: UITextField!
@IBOutlet weak var playerTwoName: UITextField!
@IBAction func play(_ sender: Any) {
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
}
код к реальной игре:
// ViewController.swift
// Tic Tac Toe
// View Controller game screen
import UIKit
class ViewController: UIViewController {
// 1 is noughts, 2 is crosses
var activePlayer:Int = 1
var activeGame:Bool = true
@IBOutlet weak var turnLabel: UILabel!
var gameState = [0, 0, 0, 0, 0, 0, 0, 0, 0] // 0 = empty, 1 = nought, 2 = cross
let winningCombination = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8],[0, 4, 8], [2, 4, 6]]
@IBAction func buttonPressed(_ sender: AnyObject) {
let activePosition = sender.tag - 1
if gameState[activePosition] == 0 && activeGame{
gameState[activePosition] = activePlayer
if activePlayer == 1 {
(sender).setImage(UIImage(named: "nought.png"), for: [])
activePlayer = 2
} else {
(sender).setImage(UIImage(named: "cross.png"), for: [])
activePlayer = 1
}
for combination in winningCombination {
if gameState[combination[0]] != 0 && gameState[combination[0]] == gameState[combination[1]] && gameState[combination[1]] == gameState[combination[2]] {
// We have a winner!
activeGame = false
print(gameState[combination[0]])
}
}
}// the spot will only be taken by the player if it is not taken yet
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
также обратите внимание, что я пытался сохранить данные на устройстве пользователя с помощью:
UserDefaults.standard.set(playerOneName.text forKey: "playerone")
Я также видел подобный вопрос, в котором говорилось, что переменные являются общедоступными и могут использоваться повсеместно, моя проблема в том, что я хочу, чтобы имена сохранялись при нажатии кнопки, и объявление их общедоступными / статическими там также не работает.