用法一
init(_:within:)
声明
init?(
_ idx: String.Index,
within target: String.UTF16View
)
参数
sourcePosition
target
共享的字符串的至少一个视图中的位置。target
找到新位置的
UTF16View
。
详述
如果作为 sourcePosition
传递的索引表示 Unicode 标量值的开始或 UTF-16 尾随代理项的位置,则初始化程序成功。如果 sourcePosition
在 target
中没有精确对应的位置,则结果为 nil
。例如,尝试转换 UTF-8 连续字节的位置会导致 nil
。
以下示例查找字符串中空格的位置,然后将该位置转换为字符串的 utf16
视图中的索引。
let cafe = "Café 🍵"
let stringIndex = cafe.firstIndex(of: "é")!
let utf16Index = String.Index(stringIndex, within: cafe.utf16)!
print(String(cafe.utf16[...utf16Index])!)
// Prints "Café"
可用版本
用法二
init(_:within:)
声明
init?(
_ sourcePosition: String.Index,
within target: String
)
参数
sourcePosition
target
参数视图中的位置。sourcePosition
必须是target
的至少一个视图的有效索引。target
结果索引引用的字符串。
详述
如果作为sourcePosition
传递的索引表示扩展字素簇的开始——字符串的元素类型——则初始化程序成功。
以下示例将 Unicode 标量 "e"
的位置转换为其在字符串中的对应位置。该位置的字符是组合的"é"
字符。
let cafe = "Cafe\u{0301}"
print(cafe)
// Prints "Café"
let scalarsIndex = cafe.unicodeScalars.firstIndex(of: "e")!
let stringIndex = String.Index(scalarsIndex, within: cafe)!
print(cafe[...stringIndex])
// Prints "Café"
如果作为 sourcePosition
传递的索引在 target
中没有精确对应的位置,则初始化程序的结果是 nil
。例如,尝试转换组合锐音符 ("\u{0301}"
) 的位置失败。组合 Unicode 标量在字符串中没有自己的位置。
let nextScalarsIndex = cafe.unicodeScalars.index(after: scalarsIndex)
let nextStringIndex = String.Index(nextScalarsIndex, within: cafe)
print(nextStringIndex)
// Prints "nil"
可用版本
用法三
init(_:within:)
声明
init?<S>(
_ sourcePosition: String.Index,
within target: S
) where S : StringProtocol
参数
sourcePosition
target
参数视图中的位置。sourcePosition
必须是target
的至少一个视图的有效索引。target
结果索引引用的字符串。
详述
如果作为sourcePosition
传递的索引表示扩展字素簇的开始——字符串的元素类型——则初始化程序成功。
以下示例将 Unicode 标量 "e"
的位置转换为其在字符串中的对应位置。该位置的字符是组合的"é"
字符。
let cafe = "Cafe\u{0301}"
print(cafe)
// Prints "Café"
let scalarsIndex = cafe.unicodeScalars.firstIndex(of: "e")!
let stringIndex = String.Index(scalarsIndex, within: cafe)!
print(cafe[...stringIndex])
// Prints "Café"
如果作为 sourcePosition
传递的索引在 target
中没有精确对应的位置,则初始化程序的结果是 nil
。例如,尝试转换组合锐音符 ("\u{0301}"
) 的位置失败。组合 Unicode 标量在字符串中没有自己的位置。
let nextScalarsIndex = cafe.unicodeScalars.index(after: scalarsIndex)
let nextStringIndex = String.Index(nextScalarsIndex, within: cafe)
print(nextStringIndex)
// Prints "nil"
可用版本
用法四
init(_:within:)
UTF16View
位置完全对应的索引。声明
init?(
_ idx: String.Index,
within target: String.UTF8View
)
参数
sourcePosition
String
或其视图之一中的位置。target
找到新位置的
UTF8View
。
详述
以下示例在字符串的 utf16
视图中查找空格的位置,然后将该位置转换为字符串的 utf8
视图中的索引。
let cafe = "Café 🍵"
let utf16Index = cafe.utf16.firstIndex(of: 32)!
let utf8Index = String.UTF8View.Index(utf16Index, within: cafe.utf8)!
print(Array(cafe.utf8[..<utf8Index]))
// Prints "[67, 97, 102, 195, 169]"
如果在 utf16Index
中传递的位置在 utf8
中没有精确对应的位置,则初始化器的结果是 nil
。例如,由于 UTF-8 和 UTF-16 以不同的方式表示高 Unicode 代码点,因此尝试转换 UTF-16 代理项对的尾随代理项的位置会失败。
下一个示例尝试转换代表茶杯表情符号 ("🍵"
) 的两个 UTF-16 代码点的索引。前导代理的索引已成功转换为 utf8
中的位置,但尾随代理的索引不是。
let emojiHigh = cafe.utf16.index(after: utf16Index)
print(String.UTF8View.Index(emojiHigh, within: cafe.utf8))
// Prints "Optional(String.Index(...))"
let emojiLow = cafe.utf16.index(after: emojiHigh)
print(String.UTF8View.Index(emojiLow, within: cafe.utf8))
// Prints "nil"
可用版本
用法五
init(_:within:)
UTF16View
位置完全对应的索引。声明
init?(
_ sourcePosition: String.Index,
within unicodeScalars: String.UnicodeScalarView
)
参数
sourcePosition
字符串的
utf16
视图中的位置。utf16Index
必须是String(unicodeScalars).utf16.indices
的一个元素。unicodeScalars
找到新位置的
UnicodeScalarView
。
详述
以下示例在字符串的 utf16
视图中查找空格的位置,然后将该位置转换为字符串的 unicodeScalars
视图中的索引:
let cafe = "Café 🍵"
let utf16Index = cafe.utf16.firstIndex(of: 32)!
let scalarIndex = String.Index(utf16Index, within: cafe.unicodeScalars)!
print(String(cafe.unicodeScalars[..<scalarIndex]))
// Prints "Café"
如果作为 sourcePosition
传递的索引在 unicodeScalars
中没有精确对应的位置,则初始化程序的结果是 nil
。例如,尝试转换 UTF-16 代理对的尾随代理的位置会导致 nil
。
可用版本
相关用法
- Swift String.Index ..<(_:_:)用法及代码示例
- Swift String.Index ...(_:_:)用法及代码示例
- Swift String.Index ..<(_:)用法及代码示例
- Swift String.Index samePosition(in:)用法及代码示例
- Swift String.Index ...(_:)用法及代码示例
- Swift String.Iterator next()用法及代码示例
- Swift String.UTF8View first用法及代码示例
- Swift String.UTF16View firstIndex(where:)用法及代码示例
- Swift String.UTF16View last(where:)用法及代码示例
- Swift String.UnicodeScalarView flatMap(_:)用法及代码示例
- Swift String.UTF8View split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代码示例
- Swift String.UTF8View elementsEqual(_:)用法及代码示例
- Swift String.UnicodeScalarView min(by:)用法及代码示例
- Swift String.UnicodeScalarView lastIndex(of:)用法及代码示例
- Swift String.UTF8View last(where:)用法及代码示例
- Swift String.UTF8View split(separator:maxSplits:omittingEmptySubsequences:)用法及代码示例
- Swift String.UnicodeScalarView filter(_:)用法及代码示例
- Swift String.UTF8View debugDescription用法及代码示例
- Swift String.UTF16View flatMap(_:)用法及代码示例
- Swift String.UTF16View min(by:)用法及代码示例
- Swift String.UTF16View shuffled(using:)用法及代码示例
- Swift String.UTF8View isEmpty用法及代码示例
- Swift String.UTF16View min()用法及代码示例
- Swift String.UTF8View starts(with:)用法及代码示例
- Swift String.UTF16View isEmpty用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 String.Index init(_:within:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。