【问题标题】:Enumerate sks files in Bundle枚举Bundle中的sks文件
【发布时间】:2020-10-08 15:41:52
【问题描述】:

我想在捆绑包中列出 .sks。它们是我的游戏水平。我只想通过丢弃其余的 .sks 来了解捆绑包中有多少级别 我试过这个

let listSKS = Bundle.main.path(forResource:".//Stage1", ofType: "sks")
print(listSKS)

返回 -> ("/private/var/containers/Bundle/Application/2B72AD87-E6FE-45FF-9DCC-AB0F27F2F353/Madness Jumping.app/./Stage1.sks")

let listLevels = GameScene(fileNamed: ".//Stage1")
print(listLevels)

返回 -> 可选(名称:'Stage1' 框架:{{-896, -414}, {1792, 828}} 锚点:{0.5, 0.5})

let listSKS2 = Bundle.main.path(forResource:".//Stage*", ofType: "sks")
print(listSKS2)

返回 -> 无

let listLevels2 = GameScene(fileNamed: ".//Stage*")
print(listLevels2)

返回 -> 无

【问题讨论】:

    标签: swift


    【解决方案1】:

    您可以使用“Stage”过滤sks文件,如下所示:

    let filePrefix = "Stage"
    if let fileURLs = Bundle.main.urls(forResourcesWithExtension: "sks", subdirectory: nil) {
         let filteredArray = fileURLs.filter{ $0.lastPathComponent.range(of: "^\(filePrefix)", options: [.regularExpression, .caseInsensitive, .diacriticInsensitive]) != nil }
         print("Filtered Array",  filteredArray)
    }
    

    【讨论】:

    • 如果它有效,你能接受它作为答案吗?谢谢
    • 系统不会让我标记为答案,因为我是这里的新手。对不起。
    【解决方案2】:

    你应该改用urls(forResourcesWithExtension:)

    let listSKS = Bundle.main.urls(forResourcesWithExtension: ".sks", subdirectory: nil)
    

    只获取文件名:

    if let listSKS = Bundle.main.urls(forResourcesWithExtension: ".sks", subdirectory: nil) {
        let files = listSKS.map(\.lastPathComponent).filter({$0.prefix(5) == "Stage"})
        print(files)
    }
    

    【讨论】:

    • 谢谢。这列出了 Bundle 中的所有 SKS 文件。
    • @NicanorBurcio 更新了我的答案,只包含名称以“Stage”开头的 sks 文件
    猜你喜欢
    • 2012-11-03
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2015-08-08
    • 2010-11-26
    相关资源
    最近更新 更多