将字符串转换为数组项

时间:2018-12-22 08:17:51

标签: ios arrays swift text

以下代码创建文件并将数据放入其中,但将其保存为以下内容: Creating 10e6 element List and CArray | Substracting two 10e6 element Lists w/ hyper - List hyper subtraction took: 26.1877042 seconds Substracting two 10e6 element Lists w/ for loop - List for loop subtraction took: 20.6394032 seconds Substracting two 10e6 element CArrays w/ .list and hyper / CArray .list and hyper subtraction took: 164.4888844 seconds Substracting two 10e6 element CArrays w/ for loop | CArray for loop subtraction took: 133.00560218 seconds 如何为每个段落获取新的["123", "456", "", "789"]?想法是根据歌词的开始和结束位置将歌曲歌词保存到文件中。我是新手,所以可能会有更好的方法

item

我希望输出是

@IBOutlet weak var songName: UITextField! @IBOutlet weak var newLyrics: UITextView! @IBAction func saveSong(_ sender: Any) { let sName = songName.text! let fileManager = FileManager.default let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String let path = documentDirectory.appending("/Lyrics/\(sName).plist") let lyrics = newLyrics.text.components(separatedBy: "\n\n") print(lyrics) if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first { let filePath = tDocumentDirectory.appendingPathComponent("Lyrics") if !fileManager.fileExists(atPath: filePath.path) { do { try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil) } catch { NSLog("Couldn't create document directory") } } NSLog("Document directory is \(filePath)") } if(!fileManager.fileExists(atPath: path)){ print(path) var lyricArray = [String]() lyricArray.append("\(lyrics)") // any other key values let lyricData = NSArray(array: lyricArray) let answer = lyricData.write(toFile: path, atomically: true) print("File Created? \(answer)") } else { print("File Exists") }

实际输出为

Item0 "123" Item1 "456"

1 个答案:

答案 0 :(得分:0)

您要使用字符串插值(lyricArray)将数组的说明附加到\(...)
数组的描述是一个文字字符串,格式为"[\"item1\", \"item2\"]"

您必须附加数组的 contents

替换

lyricArray.append("\(lyrics)")

lyricArray.append(contentsOf: lyrics)

或完全删除lyricArray并简单地写

let lyricData = NSArray(array: lyrics)

或–强烈建议–

do {
    let lyricData = try PropertyListSerialization.data(fromPropertyList: lyrics, format: .xml, options: 0)
} catch { print(error) }

注意:

  • 请勿使用NSArray处理Swift中的属性列表。使用PropertyListSerialization
  • 切勿在{{1​​}}之类的catch子句中打印无意义的文字字符串。打印Couldn't do that
  • 为什么还要使用不同的API两次访问documents文件夹的路径(好的,首先是路径,然后是URL)?