- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻找“Swift 3”处理错误的方法,我尝试将字符串的位置增加到越界索引。我有一个如下所示的扩展:
extension String {
func substring(from: Int) -> String {
let fromIndex = index(from: from)
return substring(from: fromIndex)
}
}
在实现代码中,我有一个循环,它定期获取字符串 block 并将索引进一步移动到字符串中。我的问题是我不确定 Swift 3 处理“字符串结尾,如果我们已经到达结尾就不要继续”的方式是什么
实现代码是这样简单的:
myStr = myStr.substring(from: pos + 1)
如果 pos + 1
是字符串的结尾,它不应该出错,而应该只是退出/返回我的循环。这样做的最佳方式是什么?
最佳答案
你可以这样写
extension String {
func substring(from offset: Int) -> String {
let fromIndex = index(self.startIndex, offsetBy: offset)
return substring(from: fromIndex)
}
}
例子
"Hello world".substring(from: 0) // "Hello world"
"Hello world".substring(from: 1) // "ello world"
"Hello world".substring(from: 2) // "llo world"
这样的事情会产生 fatal error 。
"Hello world".substring(from: 12)
fatal error: cannot increment beyond endIndex
你可以让你的代码更安全添加这样的保护语句
extension String {
func substring(from: Int) -> String? {
guard from < self.characters.count else { return nil }
let fromIndex = index(self.startIndex, offsetBy: from)
return substring(from: fromIndex)
}
}
关于swift - 不能超过 endIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468014/
我有以下代码 public static void main(String args[]) throws Exception { String mySite = "StackOverflow"
这些评论有道理吗?试图找出为什么它删除了我的反向给定字符串的字符,而不是本例中的常规给定字符串。 import Foundation extension String { func reverse
我正在寻找“Swift 3”处理错误的方法,我尝试将字符串的位置增加到越界索引。我有一个如下所示的扩展: extension String { func substring(from: Int)
如果您创建一个 var Range = 0...0,我希望 endIndex 为零。但实际上是1。 var myRange: Range = 0...0 print("start Index \(my
我有一个函数可以找到用户在 UITextView 中选择的当前单词。但是,如果我在 UITextView.text 属性中有表情符号时调用此函数,我会看到崩溃。我相信这是因为 String 与 NSS
我想要我正在制作的计算器,特别是退格按钮来检查点是否被删除 if mainNumberLine.text!.endIndex == "." { } 写下我遇到的最常见错误“表达式类型不明确,没有更多上
我在一个项目中使用了 substring,之前我使用的是 endindex 位置,但没有产生预期的结果,后来我才知道 java substring 执行 endindex-1。我发现它没有用。那么为什
我有一个如下所示的字符串 String s = "John21071989Bangalore"; Class Person { String name; Long dob; String
endIndex 返回与 count 相同的值。这是正确的行为还是错误? var ar = [1, 2, 3, 4] ar.count // 4 ar.endIndex // 4 最佳答案 count
问题基本上说明了一切。假设我有一个(排序的)列表,可以包含从1K到1M的任何项目。我有一个starting index和一个ending index。如果我使用ArrayList.sublist(st
我正在为 iOS 应用程序使用 Swift 2.0/Xcode 7.0。我已经构建了一个日语 IME 来将罗马字符转换为对应的日语。例如: 输入“a”会将“a”转换为“あ” 在键入下一个字符之前,键入
我遇到了一些奇怪的 Range 行为,现在我质疑我认为我知道的关于 Swift 中的 Range 的一切。 let range = Range(start: 0, end: 2) print(rang
我正在尝试使用自动微分库 Adept,我让它与 gcc 4.9.0 和 icc 16.0.2 一起工作,但在 VS 2017 和 Clang 4.0.1 上失败 我已将问题简化为以下片段,并且在我与库
出于某种原因我得到了 fatal error: can not increment endIndex 在 myRange 行。为什么我会收到此错误?我不明白我的代码有什么问题。 import UIKi
我想问一下是否有某种实用函数可以在提供索引的同时提供数组连接。也许jQuery的Prototype提供了这个,如果没有,我自己写:) 我期望的是这样的 var array= ["a", "b", "c
我有 UITextView 的扩展: extension UITextView { func separatedWordsInFrontCursor(infront: Bool = true)
endIndex 和 count 的 String 在 swift2 中怎么可能不同?这是我使用的代码示例。当所有字符都只有英文时,不会发生这种情况。 print("count:",self.
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: why from index is inclusive but end index is exclusive
我尝试获取字符串的 startIndex 和另一个索引之间的距离,但在第一个循环迭代中出现以下错误。该代码实际上适用于大多数字符串,但有些会崩溃。 fatal error: cannot increm
我是 Swift 的新手,我正在探索如果在使用范围迭代集合时修改集合会发生什么。我不明白为什么这两个循环有不同的行为: var things = ["a", "b", "c"] for i in 0.
我是一名优秀的程序员,十分优秀!