[英]Xcode 8.3.3 problems calling String.index(of:)
当我尝试找到子字符串时,我的Xcode版本8.3.3(8E3004b)崩溃。 如果将以下内容粘贴到一个空的游乐场中,则会崩溃:
import UIKit
let str = "abc"
str.index(of: "b")
我简直不敢相信Apple会让这种明显的错误通过,所以经过一番毫无结果的谷歌搜索之后,我认为问题就在我这一边。 但是删除我的“派生数据”文件夹无济于事。 删除并重新安装Xcode并没有帮助。
有趣的是,如果我删除“ import UIKit”行,则会收到编译器错误,而不是崩溃:
Playground execution failed: error: MyPlayground.playground:2:8: error: argument labels '(of:)' do not match any available overloads
str.index(of: "b")
^ ~~~~~~~~~
MyPlayground.playground:2:8: note: overloads for 'index' exist with these partially matching parameter lists: (after: String.Index), (before: String.Index)
str.index(of: "b")
^
因此,似乎编译器无法在String中找到index(of:)
方法。 但这是一种标准方法! 我直接从Apples文档和“ The Swift Programming Language”复制粘贴了示例,并遇到了相同的错误。
我仍然无法想象这是Xcode中的错误,因此:
当我从游乐场查看崩溃日志时,崩溃似乎发生在swift::TypeBase::getCanonicalType() + 23
,同时试图从swift::TypeChecker::solveForExpression
中发生的其他问题中恢复。
在我的项目中,是否导入库都没有关系:在编译时会遇到分段错误。 这是我的测试课:
class Bug {
func foo() {
let str = "abc"
let _ = str.index(of: "b")
}
}
我收到一个Swift编译器错误,“命令由于信号失败:分段错误:11”。 swift::TypeChecker::solveForExpression() + 6229
中发生了一些事情,这导致对swift::constraints::ConstraintSystem::salvage
的调用,最终错误发生在swift::TypeBase::getContextSubstitutions(swift::DeclContext const*) + 1158
似乎String.index(of:)
是Swift 4中的新功能,我应该一直在调用String.characters.index(of:)
或String.range(of:)
。 我忘记了该函数的名称,并进行了快速的网络搜索,但是Apple似乎已删除了Swift 3的所有文档(即使他们尚未发布支持Swift 4的IDE)。 方法名称非常相似。
我猜想崩溃是由于UIKit中的index(of:)
的部分过早实现导致的,而我在操场上遇到的编译器错误实际上是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.