我正在尝试更改函数transferredData
中的全局变量didTransferData(_ data: Data?)
的值。我的代码如下所示:
var transferredData: [Double] = [0.0]
func didTransferData(_ data: Data?) {
var dataArray = [CUnsignedChar](repeating:0, count: (data?.count)!)
data?.copyBytes(to: &dataArray, count: dataArray.count)
let dataInt = dataArray.filter({ Int(String($0)) != nil }).map({ Int(String($0))! })
let dataDouble = dataInt.map { Double($0) }
print("Data double: \(dataDouble)")
transferredData = dataDouble
}
在transferredData
内打印didTransferData
会返回正确的数组,其中包含dataDouble
的所有值。但是当我稍后尝试在此功能中访问它时
func returnData() -> [Double]{
print("return Data: \(transferredData)")
return transferredData
}
它返回[0.0]
。我不确定我是否遗漏了一些关键的东西,但我认为即使我在函数中更改全局变量的值,新值也应该可用于其他所有函数。
感谢您的任何建议!!
答案 0 :(得分:2)
你说这段代码在一个类中。变量transferredData
不是全局变量,而是成员变量。
班上每个对象都有一个。我怀疑你没有使用同一个对象来进行这两个调用。
您可以通过将其声明为静态来在所有对象之间共享该成员,但我认为最好保持原样并安排使用相同的对象。
编辑:基于评论
如果您编写代码
let centralInstance = CentralViewController()
您将获得一个新对象,其最初设置为transferredData
的{{1}}成员。你需要
破解有效的东西(不推荐,但有助于理解)
[0.0]
移出课堂并使其成为实际的全局变量。我这样做只是为了帮助你解决这个问题,并了解正在发生的事情。transferredData
的同一个实例当你了解正在发生的事情时,你可以尝试做一些更好的事情(至少将它移动到自己的模型对象,而不是在VC中)。下一个最简单的事情是管理它的某种单身人士 - 这只是一个美化的全球变量,但让你更多地走向更典型的解决方案。
答案 1 :(得分:0)
问题出在哪里:
$ swift
Welcome to Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1). Type :help for assistance.
1> var data:[Double] = [0.0]
2.
3. class MuckWithData {
4.
5. func showData () -> [Double] {
6. print ("Data: \(data)")
7. return data
8. }
9.
10. func modifyData () {
11. data = [1.0]
12. }
13. }
data: [Double] = 1 value {
[0] = 0
}
14>
15> var mucked = MuckWithData()
mucked: MuckWithData = {}
16> mucked.showData()
Data: [0.0]
$R0: [Double] = 1 value {
[0] = 0
}
17> mucked.modifyData()
18> mucked.showData()
Data: [1.0]
$R1: [Double] = 1 value {
[0] = 1
}
可能你对dataDouble
的计算实际上是[0.0]
,因此看起来transferredData
没有改变,但确实如此。