HumanString 是一个包,允许你使用整数而不是 String.Index 来指定字符串中的范围。
let str = "今天天氣好清爽"
XCTAssertTrue(str[0] == "今")
XCTAssertTrue(str[4] == "好")
XCTAssertTrue(str[-1] == "爽")
XCTAssertTrue(str[0..<2] == "今天")
XCTAssertTrue(str[0...2] == "今天天")
XCTAssertTrue(str[-3 ..< -1] == "好清")
XCTAssertTrue(str[-3 ... -1] == "好清爽")
XCTAssertTrue(str[-3 ... 0] == nil)
XCTAssertTrue(str[-3 ..< 0] == "好清爽")
XCTAssertTrue(str[-3 ..< 1] == nil)
XCTAssertTrue(str[-3 ... 1] == nil)
XCTAssertTrue(str[0...] == "今天天氣好清爽")
XCTAssertTrue(str[1...] == "天天氣好清爽")
XCTAssertTrue(str[(-2)...] == "清爽")
XCTAssertTrue(str[(-1)...] == "爽")
XCTAssertTrue(str[..<3] == "今天天")
XCTAssertTrue(str[...3] == "今天天氣")
XCTAssertTrue(str[..<(-1)] == "今天天氣好清")
XCTAssertTrue(str[...(-1)] == "今天天氣好清爽")
你可以使用 Swift package manager 安装该包。将以下行添加到你的 Packages.swift
文件中
dependencies: [
.package(url: "https://github.com/zonble/HumanString.git"),
],
你也可以使用 CocoaPods 安装该库,只需添加 pod "HumanString"
到你的 Podfile 中。
自从 Swift 4 以来,Swift 采用了 String.Index。它倾向于提醒你字符串的宽度不是固定的 (参见Swift 4 中的字符串)。然而,这在某种程度上很痛苦。例如,如果你想从 “Hello World” 中提取前缀,它可能是这样的
let str = "Hello World"
let subString = s[...str.index(str.startIndex, offsetBy: 5)]
但是等等,但在某种程度上你仍然在使用整数,对吗?上面的代码可以写成如下形式
let subString = s[str.index(str.startIndex, offsetBy: 0)...str.index(str.startIndex, offsetBy: 5)]
我知道 Swift 团队不喜欢我在这里做的事情,但不知何故,我仍然想让我的生活更轻松。