2017-07-24 54 views
0

我正在开发一个小型项目,我正在播放可嵌入到我的应用程序中的可用MP3列表 - 一个教育应用程序。Swift 3 - 存储值,元组,数组,其他的正确方法?

我试过最难找到答案,但我似乎无法找到适合的东西,所以我平时的事情 - 如果这是一个重复我已经搜索我最难找到的东西第一。

MP3的名称与每个30章的5个单元重合。

我试图找到一种方法来存储和检索纠章,类似于:

学习单元###章MP3

我想知道什么是最好的方式来存储和/或呼叫正确的单位和章节。

我目前使用两个表视图来选择Unit#和Chapter/Lesson#。

该数据被传递到播放所需MP3的视图,所以我传递了两个变量,都是Int。

我在这里尝试了,我知道的是完全错误的,应说明什么我想(希望)做:

import Foundation 

class LessonPlan { 

var lessonMatrix = [(unit:Int,chapter:Int,filename:String)]; 

init() { 
    for unitNo in 1 ... 5 { 

     for chapterNo in 1 ... 30 { 
      chapterWithLeadingZeros = String(format: "%02d", chapterNo) 
      lessonMatrix.append(unit:unitNo, chapter:chapterNo, filename:"Learning Unit \(unitNo) Chapter \(chapterWithLeadingZeros).mp3") 
      } 
     } 


    } 
} 

我知道上面没有编制,但其我的思维过程。

感谢您提供任何方向。

Swift3/Xcode 8.3.1,试图定位iOS9。

+0

我建议你做一个新的结构类型,而不是使用元组。 – Alexander

+0

你的主要问题是'[(unit:Int,chapter:Int,filename:String)]'是* type *(等于'Array <(unit:Int,chapter:Int,filename:String)>') 。你想要做的是创建一个新类型的实例,比如'Array <(unit:Int,chapter:Int,filename:String)> .init()'。这可以简写为'Array <(unit:Int,chapter:Int,filename:String)>()',甚至是'[(unit:Int,chapter:Int,filename:String)]()' – Alexander

回答

1

这是我会怎么做:

import Foundation 

struct Lesson { 
    let unit: Int 
    let chapter: Int 

    var chapterWithLeadingZeros: String { return String(format: "%02d", chapter) } 

    var filename: String { return "Learning Unit \(unit) Chapter \(chapterWithLeadingZeros).mp3" } 
} 

class LessonPlan { 
    var lessons = (1...5).flatMap { unit in 
     (1...30).flatMap { chapter in 
      Lesson(unit: unit, chapter: chapter) 
     } 
    } 
} 

print(LessonPlan().lessons) 
+0

我是敬畏你的发展天才。我会继续学习,但哇。 –

+0

Swift为您提供了许多工具来制作短而甜的代码:) flatMap,计算属性,结构的合成初始值设定项。这是好东西,享受你的旅程! – Alexander