【问题标题】:How to search a substring in string in Swift 4?如何在 Swift 4 中搜索字符串中的子字符串?
【发布时间】:2018-04-11 20:36:38
【问题描述】:

我似乎在 Swift 4 中找不到 String 的 API。Objective-C 等价物如下。

NSString *s = @"abcdefg";
NSString *ss = @"cde";
// just check if s contains ss
NSLog(@"%d", [s containsString:ss]);
// get range of ss in s
NSLog(@"%@", NSStringFromRange([s rangeOfString:ss]));

我错过了什么?


编辑:

我收到此错误消息:

test.swift:1:19: error: cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')
"abcdef".contains("cde")

所以我没有意识到我错过了“import Foundation”...

【问题讨论】:

  • 对不起,对不起...我在命令行中使用 swift,并且“包含”在没有 import Foundation 的情况下无法构建。是的,这似乎很明显,但我没有意识到,因为我能够在没有导入行的情况下使用 String。
  • @taichino 我已经添加了关于导入Foundation 的部分。这是使用该功能的要求。这些信息在互联网上并不容易获得
  • @staticVoidMan 是的,我正在查看此 API 文档,但找不到以字符串为参数的 contains。 developer.apple.com/documentation/swift/string在哪里可以找到导入Foundation所需的这些API?
  • 当我们导入 Foundation 时,Swift 的 String 得到了扩展 NSString 的功能。您可以在 NSString's Documentation here 中找到这些 API
  • 我已经用更多细节更新了我的答案:)

标签: swift string swift4


【解决方案1】:

String 会有一个

func contains<T>(_ other: T) -> Bool where T : StringProtocol 

这将在您导入 Foundation 后可用,因为它映射到 NSString

open func contains(_ str: String) -> Bool

事实上,导入 Foundation 扩展了 Swift 的 String 以及您可以在 documentation here 中找到的所有 NSString 的功能。

原因:Swift 的 String没有NSString 那样进化,因此至少现在是 bridged


无论如何...

Swift 4 检查子字符串的解决方案是:

let string = "Hello, World"
let hasSubstring = string.contains("ello")

【讨论】:

  • @taichino 不,没关系。我已将您的问题标记为重复,但这些解决方案是 Swift 3 及之前的版本。另外,即使我在谷歌上找不到答案,也找不到 Swift 4 的文档链接,但无论如何它很简单:)
猜你喜欢
  • 1970-01-01
  • 2019-10-06
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多