2016-01-21 113 views
0

我在我的一个项目得到的错误:“[[字符串]”到期望的参数类型“[字符串]”

无法将类型的价值“[[字符串]”以预期参数类型'[String]'

我完全理解这个错误;数组中的数组中的数组中的字符串不能作为数组中的字符串进行铸造。但我遇到的问题是一个解决方法。我试图做的是返回一串标题作为按钮,它被铸造成7行,它被铸成一组4行。所以按钮从字符串转换为UIButton,行是数组作为UIViews转换,而组是作为UIViews转换的数组。但是当我去演员时,这是我得到错误的时候。下面是相关的代码,任何帮助将非常感谢(抱歉坏英文):

let buttonTitles1 = ["1","2","3","4","5","6","7"] 
let buttonTitles2 = ["1","2","3","4","5","6","7"] 
let buttonTitles3 = ["1","2","3","4","5","6","7"] 
let buttonTitles4 = ["1","2","3","4","5","6","7"] 

let row1 = buttonTitles1 
let row2 = buttonTitles2 
let row3 = buttonTitles3 
let row4 = buttonTitles4 

let matrixTitle1 = [buttonTitles1, buttonTitles1, buttonTitles1, buttonTitles1] 
let matrixTitle2 = [buttonTitles1, buttonTitles1, buttonTitles1, buttonTitles1] 

let matrix1 = createArraysOfButtons(matrixTitle1) 
let matrix2 = createArraysOfButtons(matrixTitle2) 

keyBoardKeys.addSubview(matrix1) //ERROR 
keyBoardKeys.addSubview(matrix2) //ERROR 

//BUTTON FUNCTION 

func createButtonWithTitle(title: String) -> UIButton { 

    let button = UIButton(type:.System) as UIButton 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitle(title, forState: .Normal) 
    button.sizeToFit() 
    button.titleLabel!.font = UIFont.systemFontOfSize(15) 
    button.backgroundColor = UIColor.greenColor() 
    button.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
    print("BUTTON") 
    return button 
} 

//ROW FUNCTION 

func createRowOfButtons(buttonTitles: [String]) -> UIView { 

    var buttons = [UIButton]() 
    let keyboardRowView = UIView() 
    keyboardRowView.translatesAutoresizingMaskIntoConstraints = false 

    for buttonTitle in buttonTitles{ 

     let button = createButtonWithTitle(buttonTitle as String) 
     buttons.append(button) 
     keyboardRowView.addSubview(button) 
    } 

    addIndividualButtonConstraints(buttons, mainView: keyboardRowView) 
    print("ROW") 
    return keyboardRowView 
} 

//MATRIX FUNCTION 

func createArraysOfButtons (rowTitles: [String]) -> UIView { 

    var rows = [UIView]() 
    let keyArrayView = UIView() 

    for rowTitle in rowTitles { 
      let row = createRowOfButtons([rowTitle]) 
      rows.append(row) 
      keyArrayView.addSubview(row) 
    } 

    addConstraintsToInputView(rows, mainView: keyArrayView) 
    print("MATRIX") 
    return keyArrayView 
} 
+1

看起来你需要改变你的' createArraysOfButtons'方法取代'[[String]]'而不是'[String]',然后将您传递给'createRowOfButtons'的'[rowTitle]'更改为'rowTitle' – dan

+1

好了,那很奏效。把它作为答案,我会标记它。所以它应该是'[[String]]'因为它的String/Array/Array和'rowTitle'而不是'[rowTitle]'因为它没有被作为数组转换。我的理解是否正确? – Geppelt

回答

0

你的问题是这个函数:

func createArraysOfButtons (rowTitles: [String]) -> UIView { 

    var rows = [UIView]() 
    let keyArrayView = UIView() 

    for rowTitle in rowTitles { 
      let row = createRowOfButtons([rowTitle]) 
      rows.append(row) 
      keyArrayView.addSubview(row) 
    } 

    addConstraintsToInputView(rows, mainView: keyArrayView) 
    print("MATRIX") 
    return keyArrayView 
} 

应该采取一个数组的数组和它,而不是采取简单的阵列,改变你的功能,这一点:

func createArraysOfButtons (rowTitles: [[String]]) -> UIView { 

var rows = [UIView]() 
let keyArrayView = UIView() 

for rowTitle in rowTitles { 
     let row = createRowOfButtons(rowTitle) // remove square brakets 
     rows.append(row) 
     keyArrayView.addSubview(row) 
} 

addConstraintsToInputView(rows, mainView: keyArrayView) 
print("MATRIX") 
return keyArrayView 
} 

想想你有工作,你有一个[字符串]:

let buttonTitles4 = ["1","2","3","4","5","6","7"] 

而你把它存储到另一个阵列使其[字符串]]

let matrixTitle1 = [buttonTitles1, buttonTitles1, buttonTitles1, buttonTitles1] 

然后你调用你的函数

let matrix1 = createArraysOfButtons(matrixTitle1) 
+1

也必须将该方法更改为'[[String]]'。 – Geppelt

+0

感谢您指出这一点,我表面上看问题,而不是看他的应用程序的流程。更新。 –

相关问题