为了掌握Swift编程,我写了以下文章:
var s : String = "dog"
var i1 : String.Index = advance(s.startIndex, 2)
var t1 : String = s.substringToIndex(i1)
在操场上执行这段代码时,t1的值为"do",正如预期的那样。但是,如果我试图构造一个超出字符串长度的索引,则会发生以下情况:
var s : String = "dog"
var i2 : String.Index = advance(s.startIndex, 4)
var t2
我正在尝试在Swift 3中创建一个我在Swift 2中已经有的范围,但它一直给我这个错误:String may not be indexed with 'Int', it has variable size elements
下面是我的代码:
let range = expireRange!.startIndex.advancedBy(n: 7) ..< expireRange!.startIndex.advancedBy(n: 16)
expiredRange是一个Range<Index>?
在Swift 2中,我有:
let range = expire
我正在尝试理解Swift.String.Index(_rawBits:)中_rawBits的真正含义。如果你打印一个String.Index,你会得到像Swift.String.Index(_rawBits: 983040)这样的东西。但这到底是什么意思呢?
我能(在数学上)使用这个rawBits数字来计算字符串中的实际索引吗?不是32号,16号,还是别的什么?
Swift Range使用String.Index作为其上界和下界。
我知道我们可以在Swift 4中使用下标来剪切字符串的一部分。
let s = "aString"
let subS = s[..<s.endIndex]
但问题是,如何将s裁剪成像aStr一样的subString。
我的意思是,我想做的是像s[..<(s.endIndex-3)]这样的东西。
但这是不对的。
那么,如何在Swift 4中做到这一点呢?
当我想用Swift剪一根绳子的时候,我有点怀念他们想让我做的事情。他们告诉我斯威夫特是“客观的”。但它实际上是“行不通的”。我阅读的docs ()中解释了从字符串中移除子范围。但在我回到ObjC之前,让我问一个问题:
measurements.removeSubrange(1..<4)
我做了
logString = logString.removeSubrange(logSizeLimit..logString.count)
上面写着Cannot find operator '..' in scope; did you mean '...'?我把它改成了
摘自苹果的Swift编程语言(SWIFT4.2)文档。
let greeting = "Hello, world!"
let index = greeting.firstIndex(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
上面的示例非常好,除非我排除了代码的Nil合并部分。
let beginning = greeting[..<greeting.firstIndex(of: ",")]
通过省略?? greeting.endIndex,Xco
我对Swift非常陌生,并且尝试使用正则表达式,但是从字符串中获得匹配似乎是一项无法克服的任务。
这是我目前的做法。
print(data.substring(with: (data.range(of: "[a-zA-Z]at", options: .regularExpression))))
这不管用,因为
Value of optional type 'Range<String.Index>?' must be unwrapped to a value of type 'Range<String.Index>'
我想这
使用in属性访问字符串中单个字符的所有索引。参考Swift文档。
let greeting = "Guten Tag!"
for index in greeting.indices {
print("\(greeting[index]) ", terminator: "")
}
// Prints "G u t e n T a g ! "
但当我试着
for index in greeting {
print("\(index) ", terminator: "")
}
//
我试图在Swift游乐场中实现Boyer算法,我经常使用Swift String.Index,而一些开始困扰我的事情是,为什么索引保持在比看起来大4倍的水平。
例如:
let why = "is s on 4th position not 1st".index(of: "s")
Swift游乐场中的这段代码将生成_compoundOffset 4,而不是1。我确信这样做是有原因的,但我在任何地方都找不到解释。
这不是解释如何在Swift中获取char索引的任何问题的重复,我知道,我使用index( of :)函数来说明这个问题。我想知道为什么在使用String.
这是一个预Xcode-8快速电话..。
func gappizeAtDoubleNewlines()
{
let t = self.text!
var index = t.startIndex
var follow = index.advancedBy(1)
for i in 0 ..< (t.characters.count-4)
{
let r = index ... follow
if ( t.substringWithRange(r) == "\n\n" )
我编写了下面的python脚本,将十六进制转换为十进制。这似乎很好,至少只要十六进制有少于8个字符。
我做错什么了?Tnx!
""" converts hexidecimal to decimal"""
def HextoDec (string):
ret = 0
for i in string :
hex = "0123456789ABCDEF"
value= hex.index(i) # 0 to 15
index = string.index(i)
下面的函数给出一个NSString,从该字符串中移除HTML标记,并以NSString的形式返回结果。
private func removeHTMLTags(source: NSString) -> NSString {
var range = NSMakeRange(0, 0)
let HTMLTags = "<[^>]*>"
var sourceString = source
while sourceString.rangeOfString(HTMLTags, options: NSStringCompareOpt
我试图将我的应用程序迁移到Swift 4,Xcode 9,我得到了这个错误。它来自一个第三方框架。
距离(从:到:)‘不可用:任何字符串视图索引转换都可能在Swift 4中失败;请打开可选索引
func nsRange(from range: Range<String.Index>) -> NSRange {
let utf16view = self.utf16
let from = range.lowerBound.samePosition(in: utf16view)
let to = range.upperBound.samePositi
我试图在我的Swift项目中使用UITextChecker。下面的代码当前在最后一行中有一个错误:
var checker:UITextChecker = UITextChecker()
var textLength = countElements(textView.text)
var checkRange:NSRange = NSMakeRange(0, textLength)
var misspelledRange:NSRange = checker.rangeOfMisspelledWordInString(textView.text, range: c
对于特定的字符范围,苹果有一个如何获得整行范围的老例子:
为了获得第一行的全线范围,他们调用以下Objective函数:
[string lineRangeForRange:NSMakeRange(0, 0)]
我试图在Swift中实现相同的东西,但是由于方法签名已经改变了,所以无法使它工作:
string.lineRange(for: NSRange(location: 0, length: 0))
引发编译器错误:
Argument type 'NSRange' (aka '_NSRange') does not conform to expected