尽管已从开发人员文档中复制,但集仍然无法工作

时间:2019-02-02 16:17:53

标签: swift xcode set nsset

在尝试创建集合时,出现错误,指出“无法将类型'[Int]'的值转换为指定类型'集合'”。即使我完全按照DD中的代码编写代码,也会发生这种情况:https://developer.apple.com/documentation/swift/set

var intSet2 : Set = [2, 3, 5, 7]  
// Cannot convert value of type '[Int]' to specified type 'Set'

我现在已切换到“ NSSet”(我是通过偶然发现的),现在它似乎可以工作了。为什么使用正常的“设置”不起作用?当我转到NSSet的DD时,它说:“一个表示静态,无序,唯一集合的对象,用于需要引用语义的情况,而不是Set常量。”这是关于引用类型的吗? DD还声明数组是值类型。我在一个损失,以时要使用设置或NSSet中(或甚至的NSMutableSet该方式)。

var intSet2 : NSSet = [2, 3, 5, 7]  
// Works

最后,当我尝试的颜色数组转换类型[CardColor]对集或NSSet中,收到错误消息指出:“无法将类型的值‘[CardColor]’到指定的类型‘的NSSet’< / p>

let colorCheck = selectedCards.map { $0.color }  
var colorCheckSet : NSSet = colorCheck  
// Cannot convert value of type '[CardColor]' to specified type 'NSSet'

谢谢您的帮助。

设置模式:

import Foundation

class Set {

    // MARK: properties

    var deck = [Card]()
    var tableCards = [Card]()
    var matchedCards = [Card]()
    var selectedCards: [Card] {
        get {
            var cards = [Card]()
            for card in tableCards.indices {
                if tableCards[card].isSelected == true {
                    cards.append(tableCards[card])
                }
            }
            return cards
            }
    }

    var unmatchedCards = 12

    var score = 0

    // MARK: functions

    // Selects the card. If this is the third card to be selected, proceeds to check for matches
    func selectCard(at index: Int) {
        if tableCards[index].isSelected == false {
            if selectedCards.count < 3 {
                tableCards[index].isSelected = true
                if selectedCards.count == 3 {
                    checkIfCardsMatch()
                }
            }
        }
        else if tableCards[index].isSelected == true {
            tableCards[index].isSelected = false
        }
    }


    func checkIfCardsMatch() {
        let colorCheck = selectedCards.map { $0.color }
        var colorCheckSet : NSSet = colorCheck
        // Cannot convert value of type '[CardColor]' to specified type 'NSSet'

        var intSet2 : Set = [2, 3, 5, 7]
        // Cannot convert value of type '[Int]' to specified type 'Set'

//        for item in colorCheck {
//            colorCheckSet.insert()
//        }
//        let symbolCheck: Set = selectedCards.map() { $0.symbol }
//        let numberCheck: Set = selectedCards.map() { $0.number }
//        let shadingCheck: Set = selectedCards.map() { $0.shading }
        }

    // MARK: functions

    func dealThreeMoreCards() {
        if unmatchedCards <= 21 {
            unmatchedCards += 3
        }
        print(unmatchedCards)
    }

    //MARK: initialization

    init() {
        for cardcolor in CardColor.allCases {
                    for cardsymbol in CardSymbol.allCases {
                                for cardnumber in CardNumber.allCases {
                                            for cardshading in CardShading.allCases {
                                                let card = Card(initcolor: cardcolor, initsymbol: cardsymbol, initnumber: cardnumber, initshading: cardshading)
                                                deck.append(card)
                                    }
                        }
            }
        }
    }
}

卡模型:

import Foundation

struct Card {

    var identifier: Int = 0
    var isSelected = false

    var color: CardColor
    var symbol: CardSymbol
    var number: CardNumber
    var shading: CardShading

    static var identifierFactory = 0
    init(initcolor: CardColor, initsymbol: CardSymbol, initnumber: CardNumber, initshading: CardShading){
        color = initcolor
        symbol = initsymbol
        number = initnumber
        shading = initshading
        Card.identifierFactory += 1
        self.identifier = Card.identifierFactory
    }

}
enum CardColor: Int, CaseIterable {
    case red = 1
    case green = 2
    case purple = 3
//        static let all = [cardColor.red, cardColor.green, cardColor.purple]
}
enum CardSymbol: Int, CaseIterable {
    case ovals = 1
    case squiggles = 2
    case diamonds = 3
//        static let all = [cardSymbol.ovals, cardSymbol.squiggles, cardSymbol.diamonds]
}
enum CardNumber: Int, CaseIterable {
    case one = 1
    case two = 2
    case three = 3
//        static let all = [cardNumber.one, cardNumber.two, cardNumber.three]
}
enum CardShading: Int, CaseIterable {
    case solid = 1
    case open = 2
    case striped = 3
//        static let all = [cardShading.solid, cardShading.open, cardShading.striped]
}




// Not every Card variable has been included below. Could cause issues later.
extension Card: Hashable {
    static func == (lhs: Card, rhs: Card) -> Bool {
        return lhs.identifier == rhs.identifier &&
        lhs.isSelected == rhs.isSelected &&
        lhs.color == rhs.color &&
        lhs.symbol == rhs.symbol &&
        lhs.number == rhs.number &&
        lhs.shading == rhs.shading
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(identifier)
        hasher.combine(isSelected)
        hasher.combine(color)
        hasher.combine(symbol)
        hasher.combine(number)
        hasher.combine(shading)
    }
}

0 个答案:

没有答案