2017-07-24 49 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

相關問題