输入' Bool'不符合协议'序列'

时间:2018-03-16 20:58:36

标签: arrays swift for-in-loop

几个星期前我开始学习Swift,在一节课中(Arrays和for循环)我不得不制作func来计算投票并给出答案。

所以我让这段代码认为是这样但是这个错误弹出 - > "键入' Bool'不符合协议'序列'"

这里是代码:

<div id="welcomeFrame" class='frame2 frame' 
     data-0='transform: scale(1.0,1.0);' 
     data-150p='transform: scale(1.3, 1.3);opacity: 1;' 
     data-200p='opacity: 0; transform: scale(6, 6);'>
     TEST
</div>

错误在第4行弹出,其中包含“投票”&#39;

已经有一些数组获得了Bool类型值。

3 个答案:

答案 0 :(得分:3)

欢迎学习Swift!你偶然发现编译器是正确的东西,但作为一个初学者,它并不总是显而易见的。

在这种情况下,虽然它指向第4行作为问题,但这不是你需要修复它的地方。你需要转到问题的,在这种情况下是第1行,这里......

func printResults(forIssue: String, withVotes: Bool) -> String {

具体来说是withVotes: Bool。问题是因为你编写它的方式,它只允许你传入一个布尔值。根据您的问题和其他代码,您显然希望传递几个。

要做到这一点,只需将它设为bool数组,就像这样... withVotes: [Bool](注意方括号。)

这里是您更新的代码,第1行更改了第4行,而不是第4行。注意我还更新了签名和变量名称,以便更加“快速”#39;如果您将重点始终放在清晰度上:

func getFormattedResults(for issue: String, withVotes allVotes: [Bool]) -> String {

    var yesVotes = 0
    var noVotes  = 0

    for vote in allVotes {
        if vote {
            yesVotes += 1
        }
        else {
            noVotes += 1
        }
    }

    return "\(issue) \(yesVotes) yes, \(noVotes) no"
}

希望这能再解释一下,欢迎来到Swift家族! :)

答案 1 :(得分:0)

编译器是对的。你试图迭代bool值withVotes,这将无效。

解决方案是创建一个bool值数组。喜欢以下

for i in [true, false, true] {
    if i == true { print("true") }

}

将参数withVotesBool更改为[Bool],编译器会很高兴:)

最后可能看起来像那样

func printResults(forIssue: String, withVotes: [Bool]) -> String {
    positive = 0
    negative = 0
    for votes in withVotes {
        if votes == true {
            positive += 1
        } else {
            negative += 1
        }
    }
    return "\(forIssue) \(positive) yes, \(negative) no"
}

答案 2 :(得分:0)

你需要传入一个这样的数组:

func printResults(forIssue: String, withVotes: [Bool]) -> String {
    positive = 0
    negative = 0
    for votes in withVotes {
        if votes == true {
            positive += 1
        } else {
            negative += 1
        }
    }
    return "\(forIssue) \(positive) yes, \(negative) no"
}