2017-02-21 39 views
1

Я использую UIPickerView и даю мне ошибку (не могу преобразовать возвращаемое выражение типа '[String]' для возврата типа 'String?'/UIPickerView). Вот мой код.Невозможно преобразовать возвращаемое выражение типа '[String]' для возврата типа 'String?'/UIPickerView

// where the picker view is set up. 
let cubesToWorkWith = ["3X3", "2X2", "4X4", "5X5", "6X6", "7X7", "Skewb", "Square-One"] 
let threeByThreeArray = ["OLL", "PLL"] 
@IBOutlet weak var pickerViewOutlet: UIPickerView! 

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    let row = pickerView.selectedRow(inComponent: 0) 
    print("this is the pickerView\(row)") 

    switch row { 
    case 0: 
     return threeByThreeArray.count 
    default: 
     return cubesToWorkWith.count 
    } 
} 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    switch row { 
    case 0: 
     return threeByThreeArray[row] 
    default: 
     return getArrayForRow(row: row) 
    } 
} 
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    cubeSelected = Int16(row) 
} 
func getArrayForRow(row: Int) -> [String] { 

    switch row { 
    case 0: 
     return threeByThreeArray 
    default: 
     return cubesToWorkWith 
    } 

    } 
} 
} 

и я получаю сообщение об ошибке в случае переключения внутри titleForRow на «возвращение getArrayForRow (строка: строка)» спасибо за любую помощь заранее !!!!

+1

' getArrayForRow' возвращает '[String] и' pickerView? (_: titleForRow: ...) 'возвращает' 'Строка. Что вы ожидали? Магическое преобразование между массивом и строкой? – user28434

+0

P.S. это следующий вопрос из моего другого вопроса. Здесь: http://stackoverflow.com/questions/42316756/uipickerview-multi-components-in-swift –

+0

'getArrayForRow (строка: строка)' возвращает 'Array', но «String?» Ожидается. Я не понимаю ожидаемый результат, но 'getArrayForRow (строка: строка). Сначала будет исправлена ​​ошибка и, надеюсь, поможет вам понять проблему :-) – shallowThought

ответ

1

так что не хватает несколько вещь сначала нужно установить делегат объявления источника данных в sekf и в titleForRow: вам необходимо вернуть строку так ваш функ getArrayForRow (строка: Int) -> [String] необходимость быть как Func getArrayForRow (строка: Int) -> Строка

вот мое предложение:

класс ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { // где вид выбора настроен. let cubesToWorkWith = ["3X3", "2X2", "4X4", "5X5", "6X6", "7X7", "Skewb", "Square-One"] let threeByThreeArray = ["OLL", "PLL «]

@IBOutlet weak var pickerViewOutlet: UIPickerView! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    self.pickerViewOutlet.dataSource = self 
    self.pickerViewOutlet.delegate = self 

    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    let row = pickerView.selectedRow(inComponent: 0) 
    print("this is the pickerView\(row)") 

    switch row { 
    case 0: 
     return threeByThreeArray.count 
    default: 
     return cubesToWorkWith.count 
    } 
} 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    switch row { 
    case 0: 
     return threeByThreeArray[row] as String 
    default: 
     return getArrayForRow(row: row) as String 
    } 
} 
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    // cubeSelected = Int16(row) 
} 

func getArrayForRow(row: Int) -> String { 

    switch row { 
    case 0: 
     return threeByThreeArray[row] 
    default: 
     return cubesToWorkWith[row] 
    } 

} 

}

+0

ok, поэтому я изменил это возвращение threeByThreeArray на это возвращение threeByThreeArray [row] –

+0

это сработало? дайте мне знать – NLU

+0

да! Спасибо, что помогли! –