Xcode 8.3.3在这一行上给了我这个Swift 3错误
values2[index] = nextValue(currentValue)
无法转换类型' Int'预期参数类型'卡'
这是我的代码:
//
// Card.swift
// match
//
// Created by quantum on 05/09/2017.
// Copyright © 2017 Quantum Productions. All rights reserved.
//
import UIKit
class Card: NSObject {
var quantity = 0
var fill = 0
var shape = 0
var color = 0
override var description : String {
return "Q" + String(quantity) + "/F" + String(fill) + "/S" + String(shape) + "/C" + String(color)
}
override init() {
super.init()
}
static func properties() -> [String] {
return ["quantity", "fill", "shape", "color"]
}
static func isMatch(cards: [Card]) -> Bool {
for property in self.properties() {
var sum = 0
for card in cards {
sum = sum + (card.value(forKey: property) as! Int)
}
if !([3, 6, 9, 7].contains(sum)) {
return false
}
}
return true
}
static func deck(_ values: [Int], _ index: Int, _ max: Int, _ acc: [Card]) -> [Card]{
let currentValue = values[index]
var values2 = values
if currentValue >= max {
if index == 0 {
return acc
}
values2[index] = 0
values2[index-1] = values2[index-1] + 1
return deck(values, index - 1, max, acc)
} else {
var acc2 = acc
let card = Card()
for (index, element) in self.properties().enumerated() {
card.setValue(values[index], forKey: element)
}
acc2.append(Card())
values2[index] = nextValue(Card())
return deck(values2, index, max, acc2)
}
}
func nextValue(_ v: Int) -> Int {
if (v == 0) {
return 1
} else if (v == 1) {
return 2
}
return 4
}
static func deck() -> [Card] {
return deck([1,1,1,1], 4, 3, [Card]())
}
}
这是我Card
班的内容。
奇怪的是,如果我尝试(这是错误的,我正在测试编译器错误)
values2[index] = nextValue(Card())
我收到错误Cannot assign the value of type (Int) -> Int to type 'Int'
。
Card
是Int
?我对发生的事情感到困惑。
我希望使用变量currentvalue来调用nextvalue,它应该是Int。
答案 0 :(得分:1)
静态方法不能调用实例方法:这个想法毫无意义,因为没有实例。因此,您对nextValue
的引用是不可能的。这就是为什么这条线存在问题。静态方法deck
如何调用实例方法nextValue
?
答案 1 :(得分:1)
来自编译器的错误消息。
您的问题是deck
已宣布为static
,但您正在尝试调用未声明为nextValue
的{{1}}。这意味着static
隐含地使用隐藏的参数nextValue
,但self
并未提供它。
如果您将deck
添加到static
声明中,它会像您期望的那样工作。 (您在引用func nextValue
的行上会收到错误,但您会更近。)
为了使其正常工作,您可能希望所有这些功能都是非静态的。试想一下最初如何调用此代码(即如何获得self.properties
的第一个实例)。