我正在尝试读取一个给定的文件NSURL并将其加载到一个数组中,其中的项目由换行符分隔\n.
这是我到目前为止的方式:
var possList: NSString? = NSString.stringWithContentsOfURL(filePath.URL) as? NSString
if var list = possList {
list = list.componentsSeparatedByString("\n") as NSString[]
return list
}
else {
//return empty list
}
Run Code Online (Sandbox Code Playgroud)
出于几个原因,我对此并不满意.一,我正在处理从几千字节到几百MB的文件.你可以想象,使用这么大的字符串是缓慢而笨拙的.其次,这会在执行时冻结UI - 再次,不好.
我已经考虑在一个单独的线程中运行此代码,但我一直遇到麻烦,此外,它仍然无法解决处理大字符串的问题.
我想做的是下面的伪代码:
var aStreamReader = new StreamReader(from_file_or_url)
while aStreamReader.hasNextLine == true {
currentline = aStreamReader.nextLine()
list.addItem(currentline)
}
Run Code Online (Sandbox Code Playgroud)
我如何在Swift中实现这一目标?
关于我正在阅读的文件的一些注意事项:所有文件都由短或(\n或255个字符)字符串组成,由或者分隔\r\n.文件的长度范围从~100行到超过5000万行.它们可能包含欧洲字符和/或带重音的字符.
我正在尝试使用iCloud Drive打开,修改和保存文件UIDocument.当我打电话save(to:for:completionHandler:)与文件的位置和使用.forOverwriting的UIDocumentSaveOperation,它的状态完成success = true.但是,iCloud文件(如桌面和iOS文件浏览器中所示)不会更新,重新打开文件时,不会显示更改.我已验证contents(forType:)在保存时返回正确(修改)的文件内容.
(注意:我已经看过这个问题了,但它没有太大帮助)
以下是相关的代码部分:
MainViewController.swift:
var saveFile: SBDocument?
@IBAction func bbiOpen_pressed(_ sender: UIBarButtonItem) {
if saveFile == nil {
let importMenu = UIDocumentMenuViewController(documentTypes: self.UTIs, in: .import)
importMenu.delegate = self
importMenu.popoverPresentationController?.barButtonItem = bbiOpen
self.present(importMenu, animated: true, completion: nil)
} else {
willClose()
}
}
func willClose(_ action: UIAlertAction?) {
if saveFile!.hasUnsavedChanges {
dlgYesNoCancel(self, title: "Save Changes?", message: "Would you like to save the changes to …Run Code Online (Sandbox Code Playgroud) 与此问题的风格相同,在将两种服务结合使用时是否会出现任何可能的复杂情况?
我有一些NSSound我想转换为AVAudioPlayer实例的对象.我有NSURL与NSSound对象关联的文件路径,但原始文件可能不存在.这是我到目前为止:
class SoundObj: NSObject {
var path: NSURL?
var sound: NSSound?
var player: AVAudioPlayer
}
let aSound = SoundObj()
aSound.path = NSURL(fileURLWithPath: "file:///path/to/sound.m4a")
aSound.sound = NSSound(contentsOfURL: aSound.path)!
do {
try aSound.player = AVAudioPlayer(contentsOfURL: aSound.path)
} catch {
// perhaps use AVAudioPlayer(data: ...)?
}
Run Code Online (Sandbox Code Playgroud)
如何将NSSound对象转换为AVAudioPlayer实例?
我有一个字符串(例如:) "Hello there. My name is John. I work very hard. Hello there!",我试图找到字符串的出现次数"hello there".到目前为止,这是我的代码:
Dim input as String = "Hello there. My name is John. I work very hard. Hello there!"
Dim phrase as String = "hello there"
Dim Occurrences As Integer = 0
If input.toLower.Contains(phrase) = True Then
Occurrences = input.Split(phrase).Length
'REM: Do stuff
End If
Run Code Online (Sandbox Code Playgroud)
不幸的是,这行代码似乎是在每次看到第一个字母时分割字符串phrase,在本例中h.因此Occurrences = 2,我实际上得到的数字要大得多,而不是我希望得到的结果.我知道计算一个字符串中的分裂数是一种可怕的方式,即使我得到了正确的答案,所以有人可以帮助我并提供一些帮助吗?
我有以下代码用于在Mac应用程序中取消归档文件:
func tryOpen(_ filePath: String) throws -> NSArray {
if #available(OSX 10.11, *) {
do {
if let data = try? Data(contentsOf: URL(fileURLWithPath: filePath)) {
let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! NSArray
return array
} else {
throw NSError(domain: NSExceptionName.invalidUnarchiveOperationException.rawValue, code: 0, userInfo: nil)
}
} catch let ex {
throw ex
}
} else {
// Fallback on earlier versions
let dat = try? Data(contentsOf: URL(fileURLWithPath: filePath))
let unarchiver = NSKeyedUnarchiver(forReadingWith: dat!)
if let array = unarchiver.decodeObject(forKey: "root") as? …Run Code Online (Sandbox Code Playgroud) 我试图将存储为csv文件的大量整数导入到VB.Net DataTable中BeamMap..csv文件仅由整数组成,其分隔符为,数字(即.1,3,-2,44,1)的引号,以及换行和回车符的行尾字符.我想要做的就是将每个整数放入一个具有适当行和列的DataTable单元格中(每行有相同数量的列),并且稍后可以在我的代码中引用它.我真的不想要任何超过代码绝对必要的东西(没有标题,标题,标题等),我需要它相当有效(csv数组约为~1000 x~1000).
谢谢!
我有一个NSTextField地方,我要求用户输入一个IPv4格式的字符串,或域名,如www.example.com.目前,我的代码是:
@IBAction func verifyTarget(sender: NSTextFieldCell) {
var txtTarget: NSTextFieldCell = sender
var strRawTarget: String? = txtTarget.stringValue
println("Input: " + strRawTarget!)
var URLTarget: NSURL?
URLTarget = NSURL.URLWithString(strRawTarget)
if URLTarget {
println("URL \(URLTarget) is valid!")
}
else {
println("URL \(strRawTarget) is not valid!")
}
}
Run Code Online (Sandbox Code Playgroud)
一些示例输出:
Input:
URL is valid!
Input: adsfasdf
URL adsfasdf is valid!
Input: afe12389hfs. . afopadsf
URL afe12389hfs. . afopadsf is not valid!
Input: 192.292.111.3
URL 192.292.111.3 is valid!
Input: 0.a.0.a
URL 0.a.0.a is …Run Code Online (Sandbox Code Playgroud)