(编辑显示Swift 1和Swift 2代码)
我试图在Linux上使用Swift 2.2读取一个小文本文件(12月22日快照) Mint 14.04和Ubuntu 15.10产生相同的结果 如果有任何方法可以从文本文件中读取,请回答。
Swift 2来源:
let text = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)
print(text)
错误:
prefix.swift:18:13: error: type 'String' has no member 'stringWithContentsOfFile'
let text = String.stringWithContentsOfFile(path, encoding: NSUTF8StringEncoding, error: nil)
^~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
Swift 1来源:
import Foundation
let text = NSString(contentsOfFile: "foo.txt", encoding: NSASCIIStringEncoding, error: nil)
print(text)
错误:
prefix.swift:14:12: error: argument labels '(contentsOfFile:, encoding:, error:)' do not match any available overloads
let text = NSString(contentsOfFile: "foo.txt", encoding: NSASCIIStringEncoding, error: nil)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prefix.swift:14:12: note: overloads for 'NSString' exist with these partially matching parameter lists: (charactersNoCopy: UnsafeMutablePointer<unichar>, length: Int, freeWhenDone: Bool), (format: String, locale: AnyObject?, arguments: CVaListPointer), (bytes: UnsafePointer<Void>, length: Int, encoding: UInt)
var text = NSString(contentsOfFile: "foo.txt", encoding: NSASCIIStringEncoding, error: nil)
^
答案 0 :(得分:2)
对于Foundation框架的跨平台版本,尚未完全实现NSString。您可以在此处跟踪基金会各个部分的状态:Foundation Status
答案 1 :(得分:2)
也可以像这样使用Glibc功能
import Glibc
let path = "./sample.txt"
let BUFSIZE = 1024
let fp = fopen(path, "r")
if fp != nil {
var buf = [CChar](count:BUFSIZE, repeatedValue:CChar(0))
while fgets(&buf, Int32(BUFSIZE), fp) != nil {
print(String.fromCString(buf)!, terminator:"")
}
}
答案 2 :(得分:0)
在Linux Swift 2.2中尝试这个(2016年1月11日快照与Foundation模块) https://swift.org/download/#older-snapshots
import Foundation
...
let path = "./sample.txt"
if let text = try? NSString(contentsOfFile: path as String, encoding: NSUTF8StringEncoding).bridge() { // use .bridge() to convert to String, see https://github.com/apple/swift-corelibs-foundation/blob/master/Docs/Issues.md#known-issues
print(text)
}