我遇到了NSRange的问题.这是我的代码:
NSRange range = [[[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:cookie]]] objectForKey:@"Cookie"] rangeOfString:@"x"];
NSLog(@"%f", range.length);
if (range.length >= 1) {
NSLog(@"Do Something");
} else {
NSLog(@"AUTHING");
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
0.000000
Do something
Run Code Online (Sandbox Code Playgroud)
然后我第二次浏览代码:
0.000000
AUTHING
Run Code Online (Sandbox Code Playgroud)
这到底是怎么回事?NSNotFound我认为它不起作用,我不是唯一一个发现这个问题的人因此使用它不是一个解决方案.
谢谢你的帮助.
干杯
编辑:我尝试使用NSLog(@"%d",range.length),但它第一次运行时输出错误,第二次运行是正确的.我已经尝试过使用NSNotFound认为奇怪的输出是由于它是NSNotFound但它没有触发
我得到以下索引超出范围错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason:
'*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(0x2263052 0x24c7d0a 0x224fdb8 0x2f4a7 0x2264ec9 0x81e299 0x81e306 0x75aa30
0x75ac56 0x741384 0x734aa9 0x39a9fa9 0x22371c5 0x219c022 0x219a90a 0x2199db4
0x2199ccb 0x39a8879 0x39a893e 0x732a9b 0x1e5b 0x1dc5 0x1)
Run Code Online (Sandbox Code Playgroud)
我确切地知道错误意味着什么,但我发现这些错误很难修复,因为由于某种原因,调用堆栈没有告诉我调用数组的代码行.这是来自线程1的调用堆栈:
#0 0x9706d9c6 in __pthread_kill ()
#1 0x93e2cf78 in pthread_kill ()
#2 0x93e1dbdd in abort ()
#3 0x02859e78 in dyld_stub__Unwind_DeleteException ()
#4 0x0285789e in default_terminate() ()
#5 0x024c7f4b in _objc_terminate ()
#6 …Run Code Online (Sandbox Code Playgroud) 给定a的下面的函数NSString从该字符串中删除HTML标记并将结果也作为a返回NSString.
private func removeHTMLTags(source: NSString) -> NSString {
var range = NSMakeRange(0, 0)
let HTMLTags = "<[^>]*>"
var sourceString = source
while sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch).location != NSNotFound {
range = sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch)
sourceString = sourceString.stringByReplacingCharactersInRange(range, withString: "")
}
return sourceString;
}
Run Code Online (Sandbox Code Playgroud)
我试图用纯粹的Swift重写它.我Range在Swift中面临类型问题.
在原始代码函数中,range变量声明为type NSRange.在我的版本中,我不能这样做,因为sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch)while循环中的行返回类型Range<String.Index>,它会给我错误无法将表达式的类型'()'转换为'NSRange'类型.
所以我声明了这个变量,var range = Range(start: 0, end: 0)但现在我得到了一些新的错误.
无法将表达式的类型'()'转换为在行中键入'Range'错误
range = sourceString.rangeOfString(HTMLTags, options: NSStringCompareOptions.RegularExpressionSearch) …Run Code Online (Sandbox Code Playgroud) 我必须匹配字符串中n个特殊字符的出现次数.
我想创建一个包含所有这些字符的数组(它们是20+)并创建一个匹配它们的函数.
我只是在字符串中有特殊字符的总数,所以我可以对它们进行一些数学计算.
所以在这个例子中:
NSString *myString = @"My string #full# of speci@l ch@rs & symbols";
NSArray *myArray = [NSArray arrayWithObjects:@"#",@"@",@"&",nil];
Run Code Online (Sandbox Code Playgroud)
该函数应返回5.
是否更容易匹配不在数组中的字符,获取字符串长度并输出原始字符串和没有特殊字符的字符串之间的差异?
这是最好的解决方案吗?
在我的应用程序中,如果文本输入很大,我需要将Read更多地设置到文本视图中.所以我的方法是找到适合文本视图的字符串范围并附加查看更多信息.有没有办法实现它在Swift中.要求是模拟阅读更多选项,以便像Facebook一样在详细视图中显示完整的文本.
有人可以给我一个提示,指出Range的哪个属性是NSRange的location属性的等价属性.
特别是我对如何从Swift 2.3 - > Swift 3.0迁移以下代码行感兴趣
if myRange.location != NSNotFound { ... }
Run Code Online (Sandbox Code Playgroud)
myRange仍然是Range属性,因此编译器告诉我正确: Type Range的值没有成员位置
检查空房子是否足够?
if !myRange.isEmpty { ... }
Run Code Online (Sandbox Code Playgroud)
提前致谢
我使用以下代码提供 UILabel 文本之间的行距。
let daysAttrString = NSMutableAttributedString(string: allDays)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 7
paragraphStyle.minimumLineHeight = 7
daysAttrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, daysAttrString.length))
cell.operationalDays.attributedText = daysAttrString
Run Code Online (Sandbox Code Playgroud)
但是我在使用 SwiftLint 时收到以下警告,如下所示:
为什么显示它以及如何解决这个问题?
嗨,我想addAttribute在Swift3中使用.
我想要只设置粗体IDNAME.
这就是我想要的.
let boldUsername = NSMutableAttributedString(string: "IDNAME hi nice 2 meet you :D #HELLOW")
// boldUsername.addAttribute(NSFontAttributeName, value: UIFont(name: "SFUIText-Bold", size: 14)!, range: (boldUsername.string as NSString).range(of: " "))
boldUsername.addAttribute(NSFontAttributeName, value: UIFont(name: "SFUIText-Bold", size: 14)!, range: NSRange(location: 0, length: 5))
Run Code Online (Sandbox Code Playgroud)
我如何获得IDNAME的索引,即每次都不同?
- >有没有办法分割空间并获得索引?
我有一个NSRange,需要将一个字符串分成两个子串,在这个NSRange的两侧.如何从NSRange中获取整数值(如索引)?
在我的应用程序中,我有一些代码来获取中的主机范围URL。看起来像这样:
private func rangeOfHost(text: String) -> NSRange? {
let url = URL(string: text)
if let host: String = url?.host {
if let range = text.range(of: host) {
return NSRange(
location: range.lowerBound.encodedOffset,
length: range.upperBound.encodedOffset - range.lowerBound.encodedOffset
)
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
Xcode一直警告我'encodedOffset' is deprecated: encodedOffset has been deprecated as the most common usage is incorrect. Use utf16Offset(in:) to achieve the same behavior.。但是,我不清楚如何用这些建议替换那些encodingOffsets。有任何想法吗?
nsrange ×10
swift ×5
ios ×3
iphone ×2
objective-c ×2
range ×2
string ×2
swift3 ×2
addattribute ×1
character ×1
exception ×1
integer ×1
nsarray ×1
nshttpcookie ×1
nsstring ×1
stack-trace ×1
swiftlint ×1
uitextview ×1