首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SubString SWIFT4.2中从Range获取SubString

如何在SubString SWIFT4.2中从Range获取SubString
EN

Stack Overflow用户
提问于 2019-07-19 18:17:58
回答 1查看 203关注 0票数 1

我是新来的斯威夫特,我想从指定的范围获得子字符串。但我有一些错误。

我在从range获得subString的过程中也发现了类似的问题,但这些问题对我来说是行不通的。我使用的是XCode 10.1和Viver4.2。在从指定的范围获取子字符串时,我得到了错误。我试过这样做(示例代码)

代码语言:javascript
复制
let textStr = "Sample text here"

let newRange = NSMakeRange(4,9)

let startIndex = textStr?.index((textStr?.startIndex)!, offsetBy: newRange.location)
let endIndex = textStr?.index((textStr?.startIndex)!, offsetBy: newRange.length)

let newHashtagRange = startIndex..<endIndex

let newHashTagFound = textStr[newHashtagRange]

错误:

下面是这行代码的错误

代码语言:javascript
复制
let newHashtagRange = startIndex..<endIndex

二进制运算符'..<‘不能应用于两个'String.Index?’操作数

我只是从过去的两天开始在这里工作。

但是在Objective中,只需要一行像SubStringFromRange(range).这样的代码

EN

回答 1

Stack Overflow用户

发布于 2019-07-19 18:34:45

您将得到一个错误,因为startIndex和endIndex都是选项,因为在定义它们时有可选的链。

这很奇怪,因为在示例代码中,textStr实际上不是可选的,可选链甚至不会编译。我猜你是想缩短这个例子。我假设textStr是可选的,并向您展示了如何避免使用强制展开,这几乎总是一个坏主意。此外,您得到的结束索引是错误的。您需要使用长度从计算的开始索引中进行偏移。这就留给你这个:

代码语言:javascript
复制
let textStr: String? = "Sample text here"

if let textStr = textStr {
    let newRange = NSMakeRange(4,9)

    let startIndex = textStr.index(textStr.startIndex, offsetBy: newRange.location)
    let endIndex = textStr.index(startIndex, offsetBy: newRange.length)

    let newHashtagRange = startIndex..<endIndex

    let newHashTagFound = textStr[newHashtagRange]
}

但是,可以从一个可靠的内置的NSRange初始化一个范围(如果范围超出范围,则返回一个可选的):

代码语言:javascript
复制
let textStr: String? = "Sample text here"

let newRange = NSMakeRange(4,9)
if let textStr = textStr
    , let newHashtagRange = Range(newRange, in: textStr)
{
    let newHashTagFound = textStr[newHashtagRange]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57117781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档