Swift: 以不均匀的时间间隔发送数据
Swift: sending Data in uneven time intervals
我有一点小问题,我在Swift方面经验太少,无法自行解决。如果有人做过类似的事情或对我有一些建议,我将不胜感激。
所以这是我的问题。我有一个应用程序正在选择的文本文件。该文件本身由一个时间戳和一行代码组成。我将两者分开并将它们保存在数组中。时间戳是不均匀的,但我需要在相应的时间发送代码线。
extension String {
var integer: Int {
return Int(self) ?? 0
}
// Converting the String Timestamp to a Float Value
var secondsfromString: Float {
var components : Array = self.components(seperatedBy: ":")
let minutes = components[0].integer
let seconds = components[1].integer
let milliseconds = components[2].integer / 100
return Float((minutes * 60) + seconds + milliseconds)
}
}
if let path = Bundle.main.path(forResource: "", ofType: "cs2") {
do {
// Getting file content and removing empty lines
let contents = try String(contentsofFile: path)
let newlines = contents.split(whereSeperator: \.isNewline)
// counting the Array
let x = newlines.count as Int
// Preallocating the Arrays and seperating timestamp and code
var timestamp = [Sting]{repeating: "", count: x}
var codelines = [Sting]{repeating: "", count: x}
for counter in 0...x-1 {
timestamp[counter] = "" + newlines[counter].prefix(8)
codelines[counter] = "" + newlines[counter].suffix(26)
}
// Getting the time in seconds from timestamp
var time = [Float](repeating: 0, count: x)
for counter in 0...x-1 {
time[counter] = 0 + timestamp[counter].secondsfromString
}
// Getting the interval between each Timestamp
var y = [Float](repeating: 0, count: x)
y[0] = time[0]
for i in 0...x-2 {
y[i+1] = time[i+1] - time[i]
}
// Here I want to send Data with the intervals I got from
// the Text file
var timer = [Timer]()
for t in 0...x-1 {
timer[t] = Timer.scheduledTimer(
.withTimeInterval: TimeInterval(y[t]),
.repeats: false, block: { timer in
//code to send Data, not yet done
})
}
我已经用定时器尝试过一些事情,例如,当我使用没有循环的定时器时,我设法让第一个时间正确,但所有其他时间间隔与第一个时间间隔相同,这不是文本文件给了我什么。当我将计时器放入没有数组计时器的循环中时,它会“立即”执行所有操作,甚至第一个间隔都不正确。现在我想尝试制作一组计时器来完成它,但我就是无法让它工作。在这种情况下使用计时器是否正确,或者有更好的方法吗?
您的 time
数组似乎已经有了您想要的值。然后计算间隔,但这在这里没有用。创建一个预定的 Timer 将相对于“现在”执行。使用 time
减去“第一次”来安排所有这些;你不需要它们之间的间隔。
我有一点小问题,我在Swift方面经验太少,无法自行解决。如果有人做过类似的事情或对我有一些建议,我将不胜感激。 所以这是我的问题。我有一个应用程序正在选择的文本文件。该文件本身由一个时间戳和一行代码组成。我将两者分开并将它们保存在数组中。时间戳是不均匀的,但我需要在相应的时间发送代码线。
extension String {
var integer: Int {
return Int(self) ?? 0
}
// Converting the String Timestamp to a Float Value
var secondsfromString: Float {
var components : Array = self.components(seperatedBy: ":")
let minutes = components[0].integer
let seconds = components[1].integer
let milliseconds = components[2].integer / 100
return Float((minutes * 60) + seconds + milliseconds)
}
}
if let path = Bundle.main.path(forResource: "", ofType: "cs2") {
do {
// Getting file content and removing empty lines
let contents = try String(contentsofFile: path)
let newlines = contents.split(whereSeperator: \.isNewline)
// counting the Array
let x = newlines.count as Int
// Preallocating the Arrays and seperating timestamp and code
var timestamp = [Sting]{repeating: "", count: x}
var codelines = [Sting]{repeating: "", count: x}
for counter in 0...x-1 {
timestamp[counter] = "" + newlines[counter].prefix(8)
codelines[counter] = "" + newlines[counter].suffix(26)
}
// Getting the time in seconds from timestamp
var time = [Float](repeating: 0, count: x)
for counter in 0...x-1 {
time[counter] = 0 + timestamp[counter].secondsfromString
}
// Getting the interval between each Timestamp
var y = [Float](repeating: 0, count: x)
y[0] = time[0]
for i in 0...x-2 {
y[i+1] = time[i+1] - time[i]
}
// Here I want to send Data with the intervals I got from
// the Text file
var timer = [Timer]()
for t in 0...x-1 {
timer[t] = Timer.scheduledTimer(
.withTimeInterval: TimeInterval(y[t]),
.repeats: false, block: { timer in
//code to send Data, not yet done
})
}
我已经用定时器尝试过一些事情,例如,当我使用没有循环的定时器时,我设法让第一个时间正确,但所有其他时间间隔与第一个时间间隔相同,这不是文本文件给了我什么。当我将计时器放入没有数组计时器的循环中时,它会“立即”执行所有操作,甚至第一个间隔都不正确。现在我想尝试制作一组计时器来完成它,但我就是无法让它工作。在这种情况下使用计时器是否正确,或者有更好的方法吗?
您的 time
数组似乎已经有了您想要的值。然后计算间隔,但这在这里没有用。创建一个预定的 Timer 将相对于“现在”执行。使用 time
减去“第一次”来安排所有这些;你不需要它们之间的间隔。