У меня странная ошибка, и мне не повезло в попытке ее исправить. У меня есть несколько связанных файлов, и я вызываю функцию в одном файле (ViewController
), который определен в другом файле (Sign.swift
). Функция в Sign.swift
создает вывод, определенный в другом файле (GameState.swift
). Я не уверен, что с этим не так, я провел много исследований, и даже этот ответ не помог. (ошибки по коду).
ViewController.swift
:
import UIKit
class ViewController: UIViewController {
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.
}
@IBOutlet weak var computerLabel: UILabel!
@IBOutlet weak var output: UILabel!
@IBOutlet weak var rockButton: UIButton!
@IBOutlet weak var paperButton: UIButton!
@IBOutlet weak var scissorsButton: UIButton!
@IBOutlet weak var playAgain: UIButton!
@IBAction func rockButtonPressed(_ sender: UIButton) {
computerLabel.text = randomSign()
var playerChoice = Sign.rock
var output = Sign.checkInputs(playerChoice, computerLabel.text) //Error 1 is here
}
@IBAction func paperButtonPressed(_ sender: UIButton) {
}
@IBAction func scissorsButtonPressed(_ sender: UIButton) {
}
@IBAction func playAgainPressed(_ sender: UIButton) {
}
}
Sign.swift
:
import Foundation
import GameplayKit
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 2)
func randomSign() -> String {
let sign = randomChoice.nextInt()
if sign == 0 {
return "?"
}
else if sign == 1 {
return "?"
}
else {
return "✌️"
}
}
enum Sign {
case rock, paper, scissors
var emoji: String {
switch self {
case .rock:
return "?"
case.paper:
return "?"
case.scissors:
return "✌️"
}
}
func checkInputs(_ user: Sign, opponent: Sign) -> String {
var outcome = GameState.draw
if (opponent == .rock) {
if (emoji == "?") {
outcome = .draw
}
else if (emoji == "?") {
outcome = .win
}
else {
outcome = .lose
}
}
else if (opponent == .paper) {
if (emoji == "?") {
outcome = .lose
}
else if (emoji == "?") {
outcome = .draw
}
else {
outcome = .win
}
}
else if (opponent == .scissors) {
if (emoji == "?") {
outcome = .win
}
else if (emoji == "?") {
outcome = .lose
}
else {
outcome = .draw
}
}
return outcome //Error 2 is here
}
}
GameState.swift
import Foundation
enum GameState {
case start, win, lose, draw
var text: String {
switch self {
case.start:
return "Game started!"
case.win:
return "You win!"
case.lose:
return "You lose!"
case.draw:
return"It's a draw!"
}
}
}
Я получаю ошибки в обоих файлах: Ошибка 1 (закомментированная строка в ViewController.swift
) содержит следующее сообщение об ошибке:
Элемент экземпляра 'checkInputs' нельзя использовать для типа 'Sign'; ты сделал
значит использовать вместо этого значение этого типа?
К сожалению, я не понимаю, что я хочу исправить из приведенного выше сообщения, я новичок в Swift.
Ошибка 2 (закомментированная строка в Sign.swift
) содержит следующее сообщение:
Невозможно преобразовать возвращаемое выражение типа GameState в возвращаемый тип.
'Строка'
Опять же, я не понимаю, что здесь происходит. В моем файле GameState.swift
нет ошибок, поэтому все ошибки должны быть в ViewController.swift
и Sign.swift
. Как мне исправить эти ошибки?
РЕДАКТИРОВАТЬ: Я обновил свой код, теперь он выглядит так:
ViewController.swift
import UIKit
class ViewController: UIViewController {
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.
}
func computerChoose() {
}
@IBOutlet weak var computerLabel: UILabel!
@IBOutlet weak var output: UILabel!
@IBOutlet weak var rockButton: UIButton!
@IBOutlet weak var paperButton: UIButton!
@IBOutlet weak var scissorsButton: UIButton!
@IBOutlet weak var playAgain: UIButton!
@IBAction func rockButtonPressed(_ sender: UIButton) {
var random = randomSign()
var stringRandom = ""
switch random {
case .rock :
stringRandom = "?"
case .paper:
stringRandom = "?"
case .scissors:
stringRandom = "✌️"
}
var playerChoice = Sign.rock
var output = Sign.checkInputs(random)
computerLabel.text = stringRandom
}
@IBAction func paperButtonPressed(_ sender: UIButton) {
}
@IBAction func scissorsButtonPressed(_ sender: UIButton) {
}
@IBAction func playAgainPressed(_ sender: UIButton) {
}
}
Sign.swift
import Foundation
import GameplayKit
let randomChoice = GKRandomDistribution(lowestValue: 0, highestValue: 2)
func randomSign() -> Sign {
let sign = randomChoice.nextInt()
if sign == 0 {
return .rock
}
else if sign == 1 {
return .paper
}
else {
return .scissors
}
}
enum Sign {
case rock, paper, scissors
var emoji: String {
switch self {
case .rock:
return "?"
case.paper:
return "?"
case.scissors:
return "✌️"
}
}
static func checkInputs(_ opponent: Sign) -> GameState {
var outcome = GameState.draw
if (opponent == .rock) {
if (emoji == "?") { //Error Emoji
outcome = .draw
}
else if (emoji == "?") { //Error Emoji
outcome = .win
}
else {
outcome = .lose
}
}
else if (opponent == .paper) { //Error Emoji
if (emoji == "?") {
outcome = .lose
}
else if (emoji == "?") { //Error Emoji
outcome = .draw
}
else {
outcome = .win
}
}
else if (opponent == .scissors) {
if (emoji == "?") { //Error Emoji
outcome = .win
}
else if (emoji == "?") { //Error Emoji
outcome = .lose
}
else {
outcome = .draw
}
}
return outcome
}
}
Примечание: Новые ошибки появляются в каждой строке с комментарием Error Emoji
, с этим сообщением об ошибке:
Элемент экземпляра 'emoji' нельзя использовать для типа 'Знак'
GameState.swift
: Без изменений .
Буду признателен за помощь.