Ios 如何制作一个;至于;在数间隔为Xcode Swift2的条件下循环

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

嘿,我正试图找出如何在45分钟内进球的情况下计算足球进球数,但是func在swift 2上有一些小错误。有什么帮助吗?谢谢 代码:

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添加了更多关于闭包的详细信息,因此您可以