Ios 如何制作一个;至于;在数间隔为Xcode Swift2的条件下循环
嘿,我正试图找出如何在45分钟内进球的情况下计算足球进球数,但是func在swift 2上有一些小错误。有什么帮助吗?谢谢 代码:Ios 如何制作一个;至于;在数间隔为Xcode Swift2的条件下循环,ios,xcode,swift,Ios,Xcode,Swift,嘿,我正试图找出如何在45分钟内进球的情况下计算足球进球数,但是func在swift 2上有一些小错误。有什么帮助吗?谢谢 代码: var barcelonavsRealMadrid1goals:[String:Int]=[“barcelonaGoal1”:21,“RealMadridGoal2”:23,“barcelonaGoal3”:24,“RealMadridGoal4”:27] func Run(){ var goalCount=0 用于barcelonavsRealMadrid1goa
var barcelonavsRealMadrid1goals:[String:Int]=[“barcelonaGoal1”:21,“RealMadridGoal2”:23,“barcelonaGoal3”:24,“RealMadridGoal4”:27]
func Run(){
var goalCount=0
用于barcelonavsRealMadrid1goals中的(目标、数字){
for(数值中的变量编号){
如果(数字<45)
守门员++
}
}
要解决您的问题,请尝试使用swift中引入的函数式编程:
var barcelonavsRealMadrid1goals : [String : Int] = ["barcelonaGoal1":95,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]
var filtered = barcelonavsRealMadrid1goals.filter { (team:String, minute:Int) -> Bool in
var state = false
if (minute > 45)
{
return true
}
return state
}
let totalCount = filtered.count
为了解决您的问题,请尝试使用swift中介绍的功能编程:
var barcelonavsRealMadrid1goals : [String : Int] = ["barcelonaGoal1":95,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]
var filtered = barcelonavsRealMadrid1goals.filter { (team:String, minute:Int) -> Bool in
var state = false
if (minute > 45)
{
return true
}
return state
}
let totalCount = filtered.count
您有一个额外的
for..in
循环,这是不需要的:
for(var number in numbers) {
它周围还有一个无关的(
和)
for var number in numbers {
以下是您的代码的工作版本:
var barcelonavsRealMadrid1goals = ["barcelonaGoal1":21,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]
func run() -> Int { // functions should start with lower case
var goalCount=0
for (_,numbers) in barcelonavsRealMadrid1goals where numbers < 45 {
goalCount++
}
return goalCount
}
let goalCount = run()
var barcelonavsRealMadrid1goals=[“barcelonaGoal1”:21,“RealMadridGoal2”:23,“barcelonaGoal3”:24,“RealMadridGoal4”:27]
func run()->Int{//函数应以小写开头
var goalCount=0
对于BarcelonavRealMadrid1Goals中的(u,数字),其中数字小于45{
守门员++
}
返回目标计数
}
让goalCount=run()
功能性的方式应该是:
let goalCount = goals.reduce(0) {
if $0.1.1 < 45 {
return $0.0 + 1
}
return $0.0
}
let goalCount=goals.reduce(0){
如果$0.1.1<45{
返回$0.0+1
}
返回$0.0
}
附说明:
var goals = [
"barcelonaGoal1" :21,
"RealMadridGoal2":23,
"barcelonaGoal3" :24,
"RealMadridGoal4":27,
"RealMadridGoal5":45]
// For our use reduce takes an initial value of Int
// and a combine function of type
// (Int, (String, Int)) -> Int
//
// Reduce will call the closure once with
// each value in the map and the previous return value
let goalCount = goals.reduce(0, combine: {
(initial:Int, current:(key:String, value:Int)) -> Int in
var currentCount = initial
// print to show input and output of closure
print( "parameters:(\(initial), (\"\(current.key)\", \(current.value)))", terminator:", ")
defer {
print("return:\(currentCount)")
}
// end printing
if current.value < 45 {
++currentCount // add 1 to the running total
return currentCount
}
return currentCount
})
// console output:
// parameters:(0, ("barcelonaGoal1", 21)), return:1
// parameters:(1, ("RealMadridGoal4", 27)), return:2
// parameters:(2, ("RealMadridGoal5", 45)), return:2
// parameters:(2, ("RealMadridGoal2", 23)), return:3
// parameters:(3, ("barcelonaGoal3", 24)), return:4
var目标=[
“巴塞罗那目标1”:21,
“RealMadridGoal2”:23,
“barcelonaGoal3”:24,
“RealMadridGoal4”:27,
“RealMadridGoal5”:45]
//我们使用reduce的初始值为Int
//和类型的组合函数
//(Int,(String,Int))->Int
//
//Reduce将使用调用一次闭包
//映射中的每个值和上一个返回值
让goalCount=目标。减少(0,合并:{
(初始值:Int,当前值:(键:字符串,值:Int))->Int in
var currentCount=初始值
//打印以显示闭包的输入和输出
打印(“参数:(\(首字母),(\”\(current.key)\,\(current.value)))”,终止符:“,”)
推迟{
打印(“返回:\(当前计数)”)
}
//末端打印
如果当前值<45{
++currentCount//将1添加到运行总数中
返回电流计数
}
返回电流计数
})
//控制台输出:
//参数:(0,(“barcelonaGoal1”,21)),返回值:1
//参数:(1,(“RealMadridGoal4”,27)),返回值:2
//参数:(2,(“RealMadridGoal5”,45)),返回值:2
//参数:(2,(“RealMadridGoal2”,23)),返回值:3
//参数:(3,(“barcelonaGoal3”,24)),返回值:4
在那里的循环中有一个多余的用于
for(var number in numbers) {
它周围还有一个无关的(
和)
for var number in numbers {
以下是您的代码的工作版本:
var barcelonavsRealMadrid1goals = ["barcelonaGoal1":21,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]
func run() -> Int { // functions should start with lower case
var goalCount=0
for (_,numbers) in barcelonavsRealMadrid1goals where numbers < 45 {
goalCount++
}
return goalCount
}
let goalCount = run()
var barcelonavsRealMadrid1goals=[“barcelonaGoal1”:21,“RealMadridGoal2”:23,“barcelonaGoal3”:24,“RealMadridGoal4”:27]
func run()->Int{//函数应以小写开头
var goalCount=0
对于BarcelonavRealMadrid1Goals中的(u,数字),其中数字小于45{
守门员++
}
返回目标计数
}
让goalCount=run()
功能性的方式应该是:
let goalCount = goals.reduce(0) {
if $0.1.1 < 45 {
return $0.0 + 1
}
return $0.0
}
let goalCount=goals.reduce(0){
如果$0.1.1<45{
返回$0.0+1
}
返回$0.0
}
附说明:
var goals = [
"barcelonaGoal1" :21,
"RealMadridGoal2":23,
"barcelonaGoal3" :24,
"RealMadridGoal4":27,
"RealMadridGoal5":45]
// For our use reduce takes an initial value of Int
// and a combine function of type
// (Int, (String, Int)) -> Int
//
// Reduce will call the closure once with
// each value in the map and the previous return value
let goalCount = goals.reduce(0, combine: {
(initial:Int, current:(key:String, value:Int)) -> Int in
var currentCount = initial
// print to show input and output of closure
print( "parameters:(\(initial), (\"\(current.key)\", \(current.value)))", terminator:", ")
defer {
print("return:\(currentCount)")
}
// end printing
if current.value < 45 {
++currentCount // add 1 to the running total
return currentCount
}
return currentCount
})
// console output:
// parameters:(0, ("barcelonaGoal1", 21)), return:1
// parameters:(1, ("RealMadridGoal4", 27)), return:2
// parameters:(2, ("RealMadridGoal5", 45)), return:2
// parameters:(2, ("RealMadridGoal2", 23)), return:3
// parameters:(3, ("barcelonaGoal3", 24)), return:4
var目标=[
“巴塞罗那目标1”:21,
“RealMadridGoal2”:23,
“barcelonaGoal3”:24,
“RealMadridGoal4”:27,
“RealMadridGoal5”:45]
//我们使用reduce的初始值为Int
//和类型的组合函数
//(Int,(String,Int))->Int
//
//Reduce将使用调用一次闭包
//映射中的每个值和上一个返回值
让goalCount=目标。减少(0,合并:{
(初始值:Int,当前值:(键:字符串,值:Int))->Int in
var currentCount=初始值
//打印以显示闭包的输入和输出
打印(“参数:(\(首字母),(\”\(current.key)\,\(current.value)))”,终止符:“,”)
推迟{
打印(“返回:\(当前计数)”)
}
//末端打印
如果当前值<45{
++currentCount//将1添加到运行总数中
返回电流计数
}
返回电流计数
})
//控制台输出:
//参数:(0,(“barcelonaGoal1”,21)),返回值:1
//参数:(1,(“RealMadridGoal4”,27)),返回值:2
//参数:(2,(“RealMadridGoal5”,45)),返回值:2
//参数:(2,(“RealMadridGoal2”,23)),返回值:3
//参数:(3,(“barcelonaGoal3”,24)),返回值:4
试试这个方法
func Run() {
var goalCount=0
for (_, score) in barcelonavsRealMadrid1goals {
if(score < 45) {
goalCount++
}
}
print(goalCount)
}
func运行(){
var goalCount=0
对于barcelonavsRealMadrid1goals中的(u,score){
如果(分数<45){
守门员++
}
}
打印(目标计数)
}
试试这个方法
func Run() {
var goalCount=0
for (_, score) in barcelonavsRealMadrid1goals {
if(score < 45) {
goalCount++
}
}
print(goalCount)
}
func运行(){
var goalCount=0
对于barcelonavsRealMadrid1goals中的(u,score){
如果(分数<45){
守门员++
}
}
打印(目标计数)
}
具体错误是什么?为什么要使用如此复杂的方法?是您造成了语法错误。好的,谢谢您提供的提示。您是否要对[String,Int]中小于45的每个Int
进行汇总
或者你只是想计算哪些小于45?我的答案基于后者,因为看起来这就是你想要的。具体的错误是什么?你为什么使用如此复杂的方法?你造成了语法错误。好的,谢谢你的提示。你想把小于45的每个Int
加起来吗45在您的[String,Int]
还是你只是想数一数哪些小于45?我的答案是基于后者的,因为这看起来就是你想要的。很高兴能帮上忙!如果你学会了函数式方法,它真的可以简化你的代码。函数映射
,过滤
和减少
非常强大。@Hunter I添加了更多关于闭包的详细信息,因此您可以