![](/img/trans.png)
[英]Cannot convert value of type 'String?.Type' to expected argument type 'String?'
[英]'[[String]]' to expected argument type '[String]'
我在我的一个项目中遇到了错误:
无法将类型[[[String]]'的值转换为预期的参数类型'[String]'
我完全理解这个错误; 我在数组中的数组中有一个字符串,无法将其转换为数组中的字符串。 但是我遇到的问题是解决方法。 我想做的是返回一个标题字符串作为按钮,将其强制转换为7行,强制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
}
您的问题在于此功能:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.