繁体   English   中英

Xcode 8.3.3调用String.index(of :)的问题

[英]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中的错误,因此:

  • 还有什么我应该尝试的吗?
  • 这是一个已知的错误?
  • 还有其他合理的方法吗(例如,我正在考虑在Objective C类中进行字符串处理只是为了解决此问题)?

崩溃详细信息(可能不重要)

当我从游乐场查看崩溃日志时,崩溃似乎发生在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM