为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Swift 4中使用String切片下标?

如何在Swift 4中使用String切片下标?

翻阅古今 2019-11-06 10:13:05
我有以下用Swift 3编写的简单代码:let str = "Hello, playground"let index = str.index(of: ",")!let newStr = str.substring(to: index)从Xcode 9 beta 5,我收到以下警告:substring(to:)不推荐使用“ ”:请String对带有“ partial range from”运算符的下标进行切片。如何在Swift 4中使用部分范围的切片下标?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

将子字符串(Swift 3)转换为字符串切片(Swift 4)


Swift 3、4中的示例:


let newStr = str.substring(to: index) // Swift 3

let newStr = String(str[..<index]) // Swift 4

let newStr = str.substring(from: index) // Swift 3

let newStr = String(str[index...]) // Swift 4 

let range = firstIndex..<secondIndex // If you have a range

let newStr = = str.substring(with: range) // Swift 3

let newStr = String(str[range])  // Swift 4


查看完整回答
1 反对 回复 2019-11-06
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您应将一侧留空,因此命名为“ partial range”。


let newStr = str[..<index]

运算符的部分范围相同,只是将另一侧留空:


let newStr = str[index...]

请记住,这些范围运算符返回Substring。如果要将其转换为字符串,请使用String的初始化函数:


let newStr = String(str[..<index])

您可以在此处阅读有关新子字符串的更多信息。


查看完整回答
反对 回复 2019-11-06
?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

斯威夫特5、4

用法

let text = "Hello world"

text[0] // H

text[...3] // "Hell"

text[6..<text.count] // world

text[NSRange(location: 6, length: 3)] // wor

import Foundation


public extension String {

  subscript(value: Int) -> Character {

    self[index(at: value)]

  }

}


public extension String {

  subscript(value: NSRange) -> Substring {

    self[value.lowerBound..<value.upperBound]

  }

}


public extension String {

  subscript(value: CountableClosedRange<Int>) -> Substring {

    self[index(at: value.lowerBound)...index(at: value.upperBound)]

  }


  subscript(value: CountableRange<Int>) -> Substring {

    self[index(at: value.lowerBound)..<index(at: value.upperBound)]

  }


  subscript(value: PartialRangeUpTo<Int>) -> Substring {

    self[..<index(at: value.upperBound)]

  }


  subscript(value: PartialRangeThrough<Int>) -> Substring {

    self[...index(at: value.upperBound)]

  }


  subscript(value: PartialRangeFrom<Int>) -> Substring {

    self[index(at: value.lowerBound)...]

  }

}


private extension String {

  func index(at offset: Int) -> String.Index {

    index(startIndex, offsetBy: offset)

  }

}


查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 757 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信