2016-12-25 32 views
4

部署我的斯威夫特3应用的Heroku之后,它坠毁并出现以下错误:用于Linux的String.init(contentsOfFile :)更换?

fatal error: init(contentsOfFile:usedEncoding:) is not yet implemented: file Foundation/NSString.swift, line 1255 

什么我可以使用,而不是String.init(contentsOfFile:)在Ubuntu?

+0

这是一个该死的耻辱,苹果不提供这种基本功能...我需要减掉我的时间搞清楚了这一点,并导入第三方的lib支持这个... – denis631

+1

我不知道答案为你工作,但如果它没有一个操作源代码的swift包'FileUtils',它是C std中的一个包装器,如fopen,fwrite等,它支持创建,读取和写入文件等基本功能。 – denis631

回答

9

看到斯威夫特标准库的最新源代码,String.init(contentsOfFile:)内部调用NSString.init(contentsOfFile:usedEncoding:)。 (NSStringAPI.swift

而如您所见,Linux版本NSString.init(contentsOfFile:usedEncoding:)尚未实现。 (NSString.swift

似乎NSString.init(contentsOfFile:encoding:)已经实现并且String.init(contentsOfFile:encoding:)调用它。所以,如果你知道文件的编码,使用String.init(contentsOfFile:encoding:),如:

let fileContent = try? String(contentsOfFile: filePath, encoding: .utf8) 

如果你不知道该文件的编码字符串,你可能需要自己实现该功能。

+0

太棒了!在Ubuntu上提供编码功能 –