几个星期前我开始学习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类型值。
答案 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") }
}
将参数withVotes
从Bool
更改为[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"
}