2017-07-30 71 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)