Swift 2和Linux / OS X差异

时间:2015-12-15 16:35:09

标签: linux swift swift2

我正在尝试将一些基本的应用程序从OS X移植到Linux,但似乎Linux平台上缺少基本的东西。有些文件缺少什么? 这是一个例子:

exmcast.swift:7:20: error: value of type 'String' has no member 'stringByReplacingOccurrencesOfString'
let name: String = address.stringByReplacingOccurrencesOfString(".", withString: "_")

这个简单的代码适用于OS X.在Linux上 - 你会看到结果。 当没有基本信息丢失时,很难移植任何东西。 看起来甚至缺少基本的东西......

3 个答案:

答案 0 :(得分:5)

Swift 3将于2016年秋季发布。

最近开源的Swift和Linux端口是work in progress

  

该端口仍在进行中,但我们很高兴地说它现在可用于实验。

您可以前往Swift.orggithub.com/apple享受精彩的作品。

当您发现尚未实施的内容时,您可以提交错误和/或帮助实施该功能。

open source Swift的新版本将定期发布在Swift.org上。

答案 1 :(得分:3)

您尝试调用的方法实际上是NSString的一部分。字符串在幕后桥接到NSString,这就是为什么你能够在OS X上使用该方法的原因.NSString是Foundation框架的一部分,而Foundation并不是完全为Linux实现的。您可以在此处查看基金会各个部分的状态:Foundation Status。 NSString目前只是部分实现。

答案 2 :(得分:0)

在OSX上,您仍需要导入Foundation

在您的情况下,您可以自由使用纯Swift解决方案

    let str = "alfa.beta"
// (1)
    let str1 = str.characters.map {
        $0 == "." ? "_": $0
    }.reduce("") { (str, c) -> String in
        str + String(c)
    }
// (2)
    let str2 = String(str.characters.split(".").joinWithSeparator(["_"]))
    print(str,str1,str2) // alfa.beta alfa_beta alfa_beta

对于更高级的东西,你有强大的功能

mutating func replaceRange<C : CollectionType where C.Generator.Element == Character>(subRange: Range<Index>, with newElements: C)

mutating func replaceRange(subRange: Range<Index>, with newElements: String)