我需要NSRange对象作为给定NSString中每个大写字母的位置,以输入自定义属性字符串类的方法.
当然有很多方法可以实现这一点,例如rangeOfString:options:使用NSRegularExpressionSearch或使用RegexKitLite在遍历字符串时单独获取每个匹配.
完成此任务的最快表现方法是什么?
我想验证我正在使用的电子邮件文本RegexKitLite.h.我做的事情如下:
NSString *strEmail = [txtEmail text];
NSRange range = [strEmail rangeOfRegex:@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"];
NSLog(@"%@",range);
Run Code Online (Sandbox Code Playgroud)
现在我只是检查一下是否有效.但我在第二行得到错误.日志没有说什么.但在第二行有一个警告说:
Unknown escape sequence '\.'
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?表达中是否有问题还是存在其他问题?
所以我有一个NSString,让我们说:NSString *mainString = @"My Name is Andrew (I like computers)";
我想从mainString中删除"("到")"中的所有内容.我想将"()"之间的所有内容放入subString中.
例如:
NSString *mainString = @"My Name is Andrew (I like computers)";
NSString *subString;
//The code I need help with
mainString = @"y Name is Andrew ";
subString = @"I like computers";
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的.这真的对我很有帮助.提前致谢.我一直在玩NSRange和NSMutableStrings,但我有麻烦了.提前致谢.
我正在开发一个Cocoa Mac OSX应用程序,我想知道是否有可能通过以下方式呈现NSRange找到的内容:
NSRange range;
range.location = 4;
range.length = 4;
Run Code Online (Sandbox Code Playgroud)
作为一个NSString?
例如,在上面的示例中,如果我有一个内容为"abcdefgh"的字符串,则将上述范围的内容显示为字符串将给出"efgh".这可能吗?
对于某些方法,我希望它们返回一系列值(从:235,到:245).我使用它NSRange作为返回值
- (NSRange)giveMeARangeForMyParameter:(NSString *)myParameter;
Run Code Online (Sandbox Code Playgroud)
只要返回值是一个integer范围(例如位置:235,长度:10),这就可以正常工作.
但是现在我遇到了需要返回float范围的问题(例如位置:500.5,长度:0.4).我在doc中读到了NSRange一个typedefed结构NSUIntegers.是否可以为float范围键入另一个结构?如果是这样,是否可以采用类似的方法NSMakeRange(NSUInteger loc, NSUInteger len)来创建这些float范围?
我想调用方法"deleteCharactersInRange"但它不起作用.
这是苹果文档的摘录:
迅速
func deleteCharactersInRange(_ aRange:NSRange)
var day = ""
let stringRange:NSRange = NSMakeRange(0, 4)
day = day.deleteCharacterInRange(stringRange)
// I've also tried this, because in the Documentation
// I can't see wether the method is void or returns a String
day.deleteCharacterInRange(stringRange)
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
'String'没有名为'deleteCharactersInRange'的成员
我刚刚将Xcode更新到8.0 beta 2和swift 3.0.从swift 2.3更新后,我遇到了很多错误.
我有一个String-extension,它将"self"-string中的Range转换为NSRange:
extension String {
func NSRangeFromRange(_ range : Range<String.Index>) -> NSRange {
let utf16view = self.utf16
let from = String.UTF16View.Index(range.lowerBound, within: utf16view)
let to = String.UTF16View.Index(range.upperBound, within: utf16view)
print("to: \(to) from: \(from)")
print(self.characters.count)
return NSMakeRange(utf16view.startIndex.distance(to: from), from.distance(to: to))
// return NSMakeRange(0, 0) // <-- removes exception
}
}
Run Code Online (Sandbox Code Playgroud)
当执行NSMakeRange时,我收到一个错误:
因未捕获的异常'NSRangeException'而终止应用程序,原因:'NSMutableRLEArray objectAtIndex:effectiveRange :: out of bounds'
当我打印到索引和索引时,我得到:
to:Index(_offset:194)from:Index(_offset:181)
字符串的字符数210似乎是正确的.
所以,我不明白为什么它告诉我索引是超出界限的,当它们少于总数.
在我更新到swift 3之前,这条线路工作正常.当时它看起来像这样:
return NSMakeRange(utf16view.startIndex.distanceTo(from), from.distanceTo(to))
Run Code Online (Sandbox Code Playgroud)
自动转换器没有将语法从swift 2.3更新到3.0,我自己做了..
有线索吗?
以下代码的Swift构造函数是什么?
NSMakeRange(0, textfield.text!.characters.count)
Run Code Online (Sandbox Code Playgroud) 这是我的情况:
我NSMutableAttributedString在文本视图中没有属性.每当用户按下退格键时,我都不希望删除一个字符,我希望它能够被删除,就像生产力套件的"Track Changes"功能一样.我希望用户能够在此之后继续正常输入.这是我开始的方式:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if (text.length == 0 && textView.text.length == 0) return YES;
if (text.length == 0 && !([[textView.text substringFromIndex:textView.text.length - 1] isEqualToString:@" "] || [[textView.text substringFromIndex:textView.text.length - 1] isEqualToString:@"\n"])) {
textView.attributedText = [self strikeText:textView.attributedText];
textView.selectedRange = NSMakeRange(textView.attributedText.length - 1, 0);
return NO;
}
return YES;
}
- (NSAttributedString *)strikeText:(NSAttributedString *)text
{
NSRange range;
NSMutableAttributedString *returnValue = [[NSMutableAttributedString alloc] initWithAttributedString:text];
if (![text attribute:NSStrikethroughStyleAttributeName atIndex:text.length - 1 effectiveRange:&range]) {
NSLog(@"%@", NSStringFromRange(range));
NSLog(@"%@", …Run Code Online (Sandbox Code Playgroud) 我正在尝试滚动到位于 UITextView 的属性文本中的特定子字符串。滚动完成后,我希望子字符串位于可见文本视图文本的顶部。但是,当 textView.selectedRange 位于子字符串范围下方时,我只能让子字符串到达顶部。无论滚动范围以前位于何处,如何才能使子字符串始终显示在顶部?
这是我当前的代码
let text = // a long NSAttributedString
let substring = "put me at the top!"
textView.attributedText = text
func scrollToSubstring() {
let str = text.string as NSString
let range = str.rangeOfString(substring, options: .RegularExpressionSearch, range: NSMakeRange(0, str.length), locale: nil)
textView.scrollRangeToVisible(range)
// HOW CAN I MAKE IT SO range ALWAYS APPEARS AT THE TOP?
}
Run Code Online (Sandbox Code Playgroud)