Linux Swift字符串HASUFFIX错误
String.hasSuffix在Linux上的Swift 2.2-dev脚本中似乎不起作用。它在REPL中工作。我错过了什么 猫哈苏费克斯。斯威夫特 斯威夫特·哈苏菲克斯 快速版 可供替代的 由于某些原因,您的脚本确实混淆了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启动的,并且表现不
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