【问题标题】:How to get first 20 items in pList dictionary in Swift如何在 Swift 中获取 pList 字典中的前 20 个项目
【发布时间】:2016-02-19 11:46:04
【问题描述】:

我正在尝试使用以下扩展名对我的数组进行洗牌:

extension Array {
var shuffled: [Element] {
    guard count > 1 else { return self }
    var elements = self
    for index in indices {
        let newIndex = Int(arc4random_uniform(UInt32(elements.count - index))) + index
        guard index != newIndex else { continue }
        swap(&elements[index], &elements[newIndex])
    }
    return elements
  }
}

然后我使用此代码随机播放并获取我的 plist 中的前 20 个项目:

var questionsArray = [myPlistArray?.shuffled]
let shuffledQuestions = questionsArray.shuffle() // instance member cannot be used on type 'myViewController'
let first20 = questionsArray.prefix(20)

但是,我总是收到此错误: // 实例成员不能用于“myViewController”类型

有谁知道如何正确操作? 或者有谁知道我怎样才能洗牌 pList 项目并获得前 20 个项目?

我的问题与这个问题完全相同:How to return first 5 objects of Array in Swift?,但是,我的数据在 plist 字典文件中......

无论如何,我的 pList 文件是这样的:myPlistArray.plist

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    你应该洗牌的 3 行是混乱的,没有多大意义。


    var questionsArray = [myPlistArray?.shuffled]
    

    该行创建了一个包含单个元素的数组,即 myPlistArray 的打乱版本。所以你在一个数组中有一个数组,这是没有意义的。


    let shuffledQuestions = questionsArray.shuffle() // instance member cannot be used on type 'myViewController'
    

    该行尝试在您在上一行中创建的混乱的shuffledQuestions array-within-array 上调用方法shuffle()(不洗牌,洗牌,不存在)。


    let first20 = questionsArray.prefix(20)
    

    如果你的前 2 行格式正确,那一行实际上是有意义的。

    你只想要这个:

    let questionsArray = myPlistArray?.shuffled //Create a shuffled version
    let first20 = questionsArray.prefix(20)  //take the first 20 items.
    

    假设 myPlistArray 是一个可选数组,该代码应该可以工作。

    【讨论】:

    • 它仍然显示如下:let questionsArray = myPlistArray?.shuffled let first20 = questionsArray.prefix(20) // instance member 'questionsArray' cannot be used on type 'myViewController'
    • 我应该把代码放在'viewDidLoad'中吗?如果是,我该如何称呼它?感谢您的帮助。
    • 你问“我应该把代码放在'viewDidLoad'中吗?”对于应该将代码放在哪里,没有通用的答案。这取决于你在哪里需要它,这取决于你想用它做什么。我不太了解您的需求,无法回答。然后你问:“如果是,我怎么称呼它?”这个问题真的没有意义。如果您将代码放在 viewDidLoad 中,它会在系统调用 viewDidLoad 时运行。你根本不叫它。您是在问如何到达 first20 数组?
    • 我使用了你的代码,但它给了我错误 // instance member 'questionsArray' cannot be used on type 'myViewController',
    • 所以编辑您的问题以显示您添加的新代码。显示包含您编写的代码的整个方法,以及代码使用的实例变量的声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多