2017-07-30 33 views
0

我有一個pickerView,其中有很多主題。每一個問題是這樣的一類:無法選擇pickerView的默認值

class subjects { 
    var idSubject: String = ""; 
    var nameSubject: String = ""; 
    var notesSubject: String = ""; 
    var colorSubject: String = ""; 

    init(subjectId: String, subjectName: String, subjectNotes: String, subjectColor: String) { 
     idSubject = subjectId 
     nameSubject = subjectName 
     notesSubject = subjectNotes 
     colorSubject = subjectColor 
    } 

    func printSubject(){ 
     print(idSubject," - ",nameSubject," - ",notesSubject," - ",colorSubject) 
    } 
} 

設置我這樣pickerView:

public func numberOfComponents(in pickerView: UIPickerView) -> Int{ 
    return 1 
} 

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
    return MenuViewController.subjectsArray.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    self.view.endEditing(true) 
    return MenuViewController.subjectsArray[row].nameSubject 
} 

我想選擇一個特定主題的行,但我不能因爲它indexOf

if let index = MenuViewController.subjectsArray.indexOf("Matematica") { 
    self.subjectsMenu.selectRow(index, inComponent: 0, animated: true) 
} 

有人可以幫助我:在這個代碼行 - 「無法將類型‘字符串’到預期的參數類型‘>布爾(學科)拋出’的價值」?

+0

有什麼類型'subjectsArray'數組?它是一個「科目」('[科目]')的數組? –

回答

1
if let index = MenuViewController.subjectsArray.index(where: { 
    $0.nameSubject == "Matematica" 
}) { 
    self.subjectsMenu.selectRow(index, inComponent: 0, animated: true) 
} 
+0

而不是YourSubjectType我必須寫什麼? – Marco

+0

@Marco'YourSubjectType'表示代表主題的類型名稱。對於你的問題,這意味着'科目' –

+1

對於這種情況下,如果你提到一個閉包參數,就沒有必要強制轉換它,你可以按原樣使用它;檢查我的答案,使其更清楚:) –

1

代替使用index(of:),適當的方法這樣的情況下的是index(where:)

返回第一個索引,其中所述集合的元素 滿足給定的謂詞

,因爲你有自定義對象(subjects)的數組,如下所示。適用:

if let index = MenuViewController.subjectsArray.index(where: { (subjectsObject) -> Bool in 
    subjectsObject.nameSubject == "Matematica" 
}) { 
    print("found the desired index: \(index)") 
    self.subjectsMenu.selectRow(index, inComponent: 0, animated: true) 
} 

補充說明:

  • 的名字你定製類應該是「主題」而不是「科目」。通常,類的名稱是指單個對象,其中包含upper camel case

  • 當比較字符串:subjectsObject.nameSubject == "Matematica",這將是更好的修剪它,比較它的下/上情況下的版本,具體如下:

    subjectsObject.nameSubject.lowercased().trimmingCharacters(in: .whitespaces) == "Matematica".lowercased().trimmingCharacters(in: .whitespaces)