【问题标题】:'[[String]]' to expected argument type '[String]''[[String]]' 到预期的参数类型'[String]'
【发布时间】:2016-01-21 17:45:57
【问题描述】:

我的一个项目出现错误:​

无法将类型“[[String]]”的值转换为预期的参数类型“[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
}

【问题讨论】:

  • 看起来您需要将 createArraysOfButtons 方法更改为采用 [[String]] 而不是 [String],然后将传递给 createRowOfButtons[rowTitle] 更改为 rowTitle
  • 好的,成功了。把它作为一个答案,我会标记它。所以它应该是[[String]],因为它是字符串/数组/数组,而rowTitle 而不是[rowTitle],因为它没有被转换为数组。我理解正确吗?

标签: ios arrays string swift


【解决方案1】:

你的问题在于这个函数:

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
}

想想你的工作是什么,你有一个 [String]:

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

你将它存储到另一个数组中,使其成为 [[String]]

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

然后你调用你的函数

let matrix1 = createArraysOfButtons(matrixTitle1)

【讨论】:

  • 还得把方法改成[[String]]
  • 感谢您指出这一点,我从表面上看问题,而不是看他的申请流程。已更新。
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 2015-12-24
相关资源
最近更新 更多