我犯了一个奇怪的错误,想改正它却没有运气。我有一些链接文件,我在一个文件中调用了一个函数(
ViewController
)在另一个文件中定义的(
Sign.swift
)功能在
斯威夫特
创建在另一个文件中定义的输出(
GameState.swift
)我不知道这是怎么回事,我做了很多研究,甚至
this answer
没有帮助。(代码下有错误)。
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) {
}
}
斯威夫特
:
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
}
}
斯威夫特
:
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(注释行
视图控制器.swift
)出现以下错误消息:
实例成员“checkinputs”不能用于类型“sign”;是否
表示使用此类型的值?
不幸的是,我不明白我要从上面的信息中修复什么,我对斯威夫特是个新手。
错误2(注释行
斯威夫特
)有此消息:
无法将“gamestate”类型的返回表达式转换为返回类型
“弦”
再说一次,我不明白这里发生了什么。我没有任何错误
斯威夫特
但是,这意味着所有错误都应该在
视图控制器.swift
和
斯威夫特
. 我应该如何修复这些错误?
编辑:
我已经更新了我的代码,现在看起来像这样:
视图控制器.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) {
}
}
斯威夫特
:
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”不能用于类型“sign”
斯威夫特
:
不变
.
我将非常感谢你对我的帮助。