Linux Swift字符串HASUFFIX错误

Linux Swift字符串HASUFFIX错误,linux,string,swift,Linux,String,Swift,String.hasSuffix在Linux上的Swift 2.2-dev脚本中似乎不起作用。它在REPL中工作。我错过了什么 猫哈苏费克斯。斯威夫特 斯威夫特·哈苏菲克斯 快速版 可供替代的 由于某些原因,您的脚本确实混淆了swift命令,但使用swiftc编译后,相同的脚本也可以工作: $swiftc hasSuffix.swift 美元/哈苏费克斯 调试 swiftc实际上只是指向swift可执行文件的链接 但是swift应用程序能够判断它是使用swift还是swiftc启动的,并且表现不

String.hasSuffix在Linux上的Swift 2.2-dev脚本中似乎不起作用。它在REPL中工作。我错过了什么

猫哈苏费克斯。斯威夫特

斯威夫特·哈苏菲克斯

快速版

可供替代的 由于某些原因,您的脚本确实混淆了
swift
命令,但使用
swiftc
编译后,相同的脚本也可以工作:

$swiftc hasSuffix.swift

美元/哈苏费克斯

调试
swiftc
实际上只是指向
swift
可执行文件的链接

但是
swift
应用程序能够判断它是使用
swift
还是
swiftc
启动的,并且表现不同

我们知道,使用
swifftc
启动编译器,使用
swift
启动REPL或“动态”编译脚本

使用
-驱动程序打印作业
作为
swift
swiftc
的选项,我们可以看到“编译器”模式和“动态”模式之间的差异:

$swift-驱动程序打印作业hasSuffix.swift

它打印实际启动的命令:

…/swift/usr/bin/swift-frontend-解释hasSuffix.swift-目标x86_64-unknown-linux-gnu-禁用objc互操作-颜色诊断-模块名称hasSuffix

现在使用
swiftc

$swiftc-驱动程序打印作业hasSuffix.swift

结果:

…/swift/usr/bin/swift autolink extract/tmp/hasSuffix-d2b2b2.o-o/tmp/hasSuffix-f2d0a9.autolink

/usr/bin/clang++/tmp/hasSuffix-d2b2b2.o-L…/swift/usr/lib/swift/linux-Xlinker-rpath-Xlinker…/swift/usr/lib/swift/linux-lswiftCore@/tmp/hasSuffix-f2d0a9.autolink-Xlinker-T…/swift/usr/lib/swift/linux/x8664/swift.ld-o hasSuffix

因此,我们可以猜测,这些不同的编译选项是您的简单脚本不能与
swift
一起工作的原因:与使用其他选项启动时相比,不知何故缺少一些东西


正如苹果在其博客中所说,开源Swift仍在进行中——许多组件尚未实现,许多bug需要修复。

有人建议我使用swiftc编译脚本。这将生成一个名为“main”的可执行文件。可执行文件运行无误,并打印预期消息。这表明解释器中存在错误?我对斯威夫特还不熟悉,只是浏览了一下“欢迎来到斯威夫特”中的例子。是我。我删除了它,因为它不是一个完整的解决方案,我想在回答之前做更多的测试是的,您的脚本在使用
swiftc
编译后即可工作。不知道为什么它不能用
swift
运行。在运行了一些测试之后,我终于给出了答案。
import Foundation
let vegetable = "red pepper"
print(vegetable.hasSuffix("pepper"))
LLVM ERROR: Program used external function '_TFE10FoundationSS9hasSuffixfSSSb' which could not be resolved!
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-unknown-linux-gnu