简体   繁体   English

Swift:NSString无法转换为“字符串”

[英]Swift: NSString not convertible to 'String'

I am new to Swift and I am trying to return a group of rows into an array, but now I am trapped in a circle of errors. 我是Swift的新手,正在尝试将一组行返回到数组中,但是现在我陷入了一个错误循环。 Any help would be appreciated. 任何帮助,将不胜感激。 I am probably missing something, but it sure does not feel like it: 我可能缺少了一些东西,但是肯定感觉不到:

EDIT: Added code (Constraints for arrays not set). 编辑:添加代码(未设置数组的约束)。

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)

    return button
}

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

    var buttons = [UIButton]()
    let keyboardRowView = UIView()

    for buttonTitle in buttonTitles{

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

    addIndividualButtonConstraints(buttons, mainView: keyboardRowView)

    return keyboardRowView
}

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

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

    for rowTitle in rowTitles {
        if let title = rowTitle as? String{
            let row = createRowOfButtons(rowTitle as String)
            rows.append(row)
            keyArrayView.addSubview(row)
        }
    }
    return keyArrayView
}

Error Message: 错误信息:

'NSString' is not implicitly convertible to 'String'; 'NSString'不能隐式转换为'String'; did you mean to use 'as' to explicitly convert? 您是要使用“ as”进行显式转换吗?

Simplest solution: Do not use NSString 最简单的解决方案: 不要使用NSString

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

    var buttons = [UIButton]()
    let keyboardRowView = UIView()

    for buttonTitle in buttonTitles{

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

    addIndividualButtonConstraints(buttons, mainView: keyboardRowView)

    return keyboardRowView
}

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)
    }
    return keyArrayView
}

The main issue is that createRowOfButtons expects an array of string but you're passing a single string to the method. 主要问题是createRowOfButtons需要一个字符串数组,但是您要将单个字符串传递给该方法。 createRowOfButtons([rowTitle]) solves that issue. createRowOfButtons([rowTitle])解决了该问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM