【发布时间】:2021-01-24 05:08:59
【问题描述】:
我正在尝试在切片上裁剪字符串并将它们发送到服务器。举个例子:我有一个字符串大小为 813753 的文件。我必须在最大大小为 10000 的切片上裁剪它。以下所有代码都将在文件选择器函数中:
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
let file = urls[0]
do{
let fileData = try Data.init(contentsOf: file.absoluteURL)
let encodedString = String.init(data: fileData, encoding: .isoLatin1)!
let fileName = file.lastPathComponent
let time = Int64(NSDate().timeIntervalSince1970)
}
}
选择后一开始我判断文件是否有分割结果>0:
let sliceCounts = encodedString.count%10000 > 0 ? encodedString.count/10000 + 1 : encodedString.count/10000
然后在循环中我试图获取文件内容切片:
for slice in 0...sliceCounts{
let partSize = slice*10000
let content = encodedString.count%10000 > 0 && partSize >= encodedString.count
? substring(from: partSize - 10000, to: encodedString.count, s:
encodedString) : substring(from: partSize, to: partSize+10000, s: encodedString)
}
我使用这种方法获取文件部分:
func substring(from : Int, to : Int, s : String) -> String {
let start = s.index(s.startIndex, offsetBy: from)
let end = s.index(s.startIndex, offsetBy: to)
return String(s[start..<end])
}
问题是我收到这样的错误:
Fatal error: String index is out of bounds: file Swift/StringCharacterView.swift, line 60
当我试图获取最后一个切片时会发生这种情况。我认为问题与这种情况有关:
encodedString.count%10000 > 0 && partSize >= encodedString.count
而且我认为由于错误,我可能在向我的方法发送索引时遇到了一些问题。也许有人会看到我在哪里犯了错误并会提供帮助:)
【问题讨论】: