Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift函数在另一个函数内不工作_Swift_Function - Fatal编程技术网

Swift函数在另一个函数内不工作

Swift函数在另一个函数内不工作,swift,function,Swift,Function,我是这个网站的新手,但我已经为我发现的这个问题挣扎了好几天。我写这段代码是为了解决站点代码战的挑战;挑战在于计算一些虚构降雨数据的平均值和方差(我在底部附上完整的页面)。为了结束这个挑战,我创建了一个函数,将这个无用字符串中的数据转换成一个双精度数组。奇怪的是,如果在主函数外部调用,则该函数可以正常工作,但在内部返回一个空数组。我不知道为什么会这样。非常感谢你为我所做的一切努力 // //梅因·斯威夫特 //普罗瓦 // //洛伦佐·桑蒂尼于2018年6月13日创作。 //版权所有©2018

我是这个网站的新手,但我已经为我发现的这个问题挣扎了好几天。我写这段代码是为了解决站点代码战的挑战;挑战在于计算一些虚构降雨数据的平均值和方差(我在底部附上完整的页面)。为了结束这个挑战,我创建了一个函数,将这个无用字符串中的数据转换成一个双精度数组。奇怪的是,如果在主函数外部调用,则该函数可以正常工作,但在内部返回一个空数组。我不知道为什么会这样。非常感谢你为我所做的一切努力

//
//梅因·斯威夫特
//普罗瓦
//
//洛伦佐·桑蒂尼于2018年6月13日创作。
//版权所有©2018洛伦佐·桑蒂尼。版权所有。
//
进口基金会
func-mean(d:String,uu-town:String)->Double{
设arrayOfValues=获得的ArrayOfMeasures(d,城镇)
变量和:双=0
对于arrayOfValues中的元素{
总和+=元素
}
返回和/双精度(arrayOfValues.count)
}
func方差(d:String,uuTown:String)->双精度{
let meanValue:Double=平均值(d,城镇)
//问题是:当调用此函数而不是返回包含所选城市的所有度量值的数组时,它将返回一个空数组
var arrayOfValues=获得的ArrayOfMeasures(d,城镇)
变量和:双=0
对于arrayOfValues中的元素{
总和+=pow((元素-平均值),2)
}
返回和/双精度(arrayOfValues.count)
}
func isInt(u-char:Character)->Bool{
开关字符{
案例“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”:
返回真值
违约:
返回错误
}
}
func获取数组的度量(d:String,uu-town:String)->[Double]{
//第一个数组存储为城市划分的数据字符串
var arrayOfString:[字符串]=[]
//第二个数组存储作为函数参数传递的城镇降雨量度量
var arrayOfMeasures:[Double]=[]
//将包含数据字符串的d变量拆分为每个城镇的单独字符串,并将其添加到arrayOfString数组中
重复{
设finalIndex=(data.index(of:“\n”)??data.endIndex

arrayOfString.append(字符串)(数据[data.startIndex..问题在于
func获得ArrayOfMeasures
修改全局
数据
变量。第二次调用时,
数据
为空字符串

这个问题的一个指标也是使全局数据变量保持不变

在上导致编译器错误

data.removeSubrange(data.startIndex..<finalIndexToRemove)
// Cannot use mutating member on immutable value: 'data' is a 'let' constant
但是请注意,该功能可以简化为

func obtainArrayOfMeasures(_ d: String,_ town: String) -> [Double] {
    let lines = d.components(separatedBy: .newlines)

    guard let line = lines.first(where: { $0.hasPrefix(town)}) else {
        return [] // No matching line found.
    }
    let entries = line.components(separatedBy: ",")
    let numbers = entries.compactMap { Double($0.filter {".0123456789".contains($0) })}
    return numbers
}
不更改任何值。还可以考虑返回<代码> nIL/COD>
如果找不到匹配的条目,请使用
fatalError()
中止。

问题在于
func-obtainArrayOfMeasures
修改全局
数据
变量。第二次调用时,
数据
为空字符串

这个问题的一个指标也是使全局数据变量保持不变

在上导致编译器错误

data.removeSubrange(data.startIndex..<finalIndexToRemove)
// Cannot use mutating member on immutable value: 'data' is a 'let' constant
但是请注意,该功能可以简化为

func obtainArrayOfMeasures(_ d: String,_ town: String) -> [Double] {
    let lines = d.components(separatedBy: .newlines)

    guard let line = lines.first(where: { $0.hasPrefix(town)}) else {
        return [] // No matching line found.
    }
    let entries = line.components(separatedBy: ",")
    let numbers = entries.compactMap { Double($0.filter {".0123456789".contains($0) })}
    return numbers
}
不更改任何值。还可以考虑返回<代码> nIL/COD>
或者,如果找不到匹配的条目,则使用
fatalError()
中止。

可能是
where line.hasPrefix(town)
如果let line=line.first(其中:{$0.hasPrefix(town)})
是的,但我会将其与
防护一起使用。@LorenzoSantini:不客气。–这很好地演示了使用常量如何帮助避免错误。@LorenzoSantini:现在查找“reduce”并简化均值和方差函数,可能
where line.hasPrefix(town)
如果let line=line。首先(其中:{$0.hasPrefix(town)}
是的,不过我会将其与
守卫一起使用。@LorenzoSantini:不客气。–这很好地演示了使用常量如何帮助避免错误。@LorenzoSantini:现在查找“reduce”简化你的均值和方差函数。你的第二个链接不起作用。最好将挑战描述作为文本发布,而不是作为屏幕截图的链接发布。链接可能会腐烂,文本更易于阅读和搜索。你的第二个链接不起作用。最好将挑战描述作为文本发布,而不是作为指向sc的链接发布链接可能会腐烂,文本可读性和可搜索性更好。
func obtainArrayOfMeasures(_ d: String,_ town: String) -> [Double] {
    let lines = d.components(separatedBy: .newlines)

    guard let line = lines.first(where: { $0.hasPrefix(town)}) else {
        return [] // No matching line found.
    }
    let entries = line.components(separatedBy: ",")
    let numbers = entries.compactMap { Double($0.filter {".0123456789".contains($0) })}
    return numbers
}