Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为一组卡片中的每个卡片实例赋值_Ios_Swift_Struct_Properties - Fatal编程技术网

Ios 为一组卡片中的每个卡片实例赋值

Ios 为一组卡片中的每个卡片实例赋值,ios,swift,struct,properties,Ios,Swift,Struct,Properties,我有一个名为Card的结构,我创建了一个函数,它应该创建一副卡片。我已经找到了一些关于创建卡片组的线索,但它们要么是在Objective-C中,要么是使用枚举分配等级和套装,我不想这么做 我有以下字符串数组: let fibonacciSeries = ["0", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "∞"] 我希望我的createDeck函数使用这些值创建一副牌: struct Card { var n

我有一个名为Card的结构,我创建了一个函数,它应该创建一副卡片。我已经找到了一些关于创建卡片组的线索,但它们要么是在Objective-C中,要么是使用枚举分配等级和套装,我不想这么做

我有以下字符串数组:

let fibonacciSeries = ["0", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "∞"]
我希望我的createDeck函数使用这些值创建一副牌:

struct Card {

var name = String()

func createDeck(series: [String]) -> [Card] {
    var deck = [Card]()
    for value in series {
        deck.append(Card(name: value))
        print("The card name is \(self.name)")
        }
        return deck
    }
}
当我这样称呼它时:

let myDeck = Card().createDeck(fibonacciSeries) 
var name = ""
对于每张卡,name属性为空(或空白),我可以通过print()调用看到它

我尝试更改我的name属性,如下所示:

let myDeck = Card().createDeck(fibonacciSeries) 
var name = ""
但它们仍然是空白的

我做了更多的研究,了解到如果我在初始值设定项中给属性赋值,我可以创建一个属性而不给它一个默认值,所以我添加了以下内容:

init(name: String) {
  self.name = name
}
仍然没有乐趣,因为Xcode提醒我需要在Card()调用中为name传递一个值,当我这样做时,所有的卡都被命名为我传入的值

最后,我想将这些卡片放入UICollectionView并查看这些值,但我似乎陷入了一个带有此名称属性的圆圈中,无法退出

我在这里查看了几个线程,没有一个我能找到的线程提供了答案


非常感谢您的帮助。

您正在创建新的
实例并将它们添加到数组中,但您没有打印新
卡的
名称
,而是打印
self
名称
,这是您初始化它时使用的空字符串

如果您在
createDeck
返回的数组中打印卡的值,那么您将看到正确的值

但是,代码的简单修复方法是为新卡使用一个变量,以便打印它

func createDeck(series: [String]) -> [Card] {
    var deck = [Card]()
    for value in series {
        let newCard=Card(name: value)
        deck.append(newCard)
        print("The card name is \(newCard.name)")
    }
    return deck
}
然而,这是对结构的一种轻微的折磨。由于您希望使用
createDeck
函数,而structs不能使用class函数,因此必须创建
Card
的实例,以便调用
createDeck
。您应该创建一个Card类,或者在面向对象的设计方面,更好的方法是创建一个Deck结构

struct Deck {
    var cards:[Card]

    init(_ series:[String]) {
            self.cards = [Card]()
            for value in series {
                let newCard=Card(name: value)
                self.cards.append(newCard)
                print("The card name is \(newCard.name)")
            }
    }
}


let myDeck = Deck(fibonacciSeries)

print(myDeck)

您有几个问题,其中最大的问题是
createDeck
函数不是声明为静态的,因此您只能在引用现有卡时调用它。正如paul指出的,当您调用print函数时,您是在您创建的虚拟实例上调用它,以便有一张卡可以使用。使createDeck成为静态解决方案,因为它现在不再需要卡来操作:

struct Card {
    var name = String()

    static func createDeck(series: [String]) -> [Card] {
        var deck = [Card]()
        for value in series {
            deck.append(Card(name: value))
            print("The card name is \(self.name)")
        }
        return deck
    }
}

let fibonacciSeries = ["0", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "∞"]

let deck = Card.createDeck(fibonacciSeries)

print(deck[0].name)
而且,fwiw,您可以将
createDeck
简化为:

static func createDeck(series: [String]) -> [Card] {
    return series.map { Card(name: $0) }
}

您的
名称
属性实际上不应该为空,您的打印语句就是错误的。您正在打印调用该方法的
实例的名称,而不是在该方法中创建的实例。谢谢您,Paul。我在Card结构中创建了这个函数,因为这是Apple Swift编程指南示例的建议。这感觉不太正确,所以我很高兴你提出了这个建议。单独的甲板结构更有意义。