Swift 2.2 Linux - 打开文件进行阅读

时间:2015-12-15 18:20:05

标签: linux swift

(编辑显示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)
           ^

3 个答案:

答案 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)
}