标签: nsrange

如何使用NSRange和整数来简化我的代码?

我刚刚开始学习Objective-C并制作了一个小指南针应用程序,当它落入一系列标题时会显示方向.它工作得很好,但我想知道是否有更简洁的方式来编写它NSRange.经过大量的研究,似乎NSRange更多地用于字符串函数而不是数字.

我尝试制作一个NSRange我的出发点的实例,使其更加简洁,我无法找到一个数字落在一个数字内的函数NSRange.

我在这里走在正确的轨道上,还是我让它变得比它需要的更冗长?

提前致谢..

这是我试图缩短代码的失败点:

// If heading falls within this range, then display "S" for south    
NSRange eastenRange = NSMakeRange (80, 100); 
NSRange southernRange = NSMakeRange (170, 190); 
etc...
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码(工作正常):

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateHeading:(CLHeading *)newHeading
{
 // Define and display the heading
 NSNumber *theHeading = [NSNumber numberWithInt:[newHeading trueHeading]];
 [headingLabel setText:[NSString stringWithFormat:@"%@°", theHeading]];

 // Define the range of directions
 NSNumber *northLowerRange = [NSNumber numberWithInt:10];
 NSNumber *northUpperRange = [NSNumber numberWithInt:350];

 NSNumber *eastLowerRange = …
Run Code Online (Sandbox Code Playgroud)

objective-c ios nsrange

6
推荐指数
2
解决办法
2万
查看次数

如何从NSRange中提取整数值?

我有一个NSRange,需要将一个字符串分成两个子串,在这个NSRange的两侧.如何从NSRange中获取整数值(如索引)?

integer objective-c nsrange

6
推荐指数
1
解决办法
3943
查看次数

encodingOffset弃用

在我的应用程序中,我有一些代码来获取中的主机范围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。有任何想法吗?

string nsrange swift

6
推荐指数
1
解决办法
1712
查看次数

indexSetWithIndexesInRange没有做到预期的事情

我想从数组中选择一些对象.因此我正在使用我选择的开始和结束索引.

NSLog(@"start:%d\nend:%d", startIndex, endIndex);
NSIndexSet *myIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(startIndex, endIndex)];
NSLog(@"%d", [myIndexes lastIndex]);
Run Code Online (Sandbox Code Playgroud)

第一个NSLog给了我

startIndex:49
endIndex:67

第二个NSLog给了我

115

为什么我的115号码数量最多?它应该是67.当然应用程序崩溃:

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' * - [NSArray objectsAtIndexes:]:索引115超出边界[0 .. 96]'

我做错了什么?

iphone cocoa-touch objective-c nsindexset nsrange

5
推荐指数
1
解决办法
4892
查看次数

关于Objective-C中的指针

我偶然发现了以下情况,似乎无法解决为什么这样做.请问你能解释为什么我之前不需要使用指针range吗?

NSString *d = @"The quick brown fox";
NSRange range = [d rangeOfString:@"brown"];
Run Code Online (Sandbox Code Playgroud)

pointers objective-c nsrange

5
推荐指数
1
解决办法
94
查看次数

带有 EMOJI 的文本字符串导致 NSRange 出现问题

我正在使用 TTTAttributedLabel 将格式应用于文本,但是它似乎崩溃了,因为我试图将格式应用于包含表情符号的范围。例子:

NSString *text = @"@user1234  #hashtag"; // text.length reported as 22 by NSLog as each emoji is 2 chars in length
cell.textLabel.text = text;

int length = 8;
int start = 13;

NSRange *range = NSMakeRange(start, length);

if (!NSEqualRanges(range, NSMakeRange(NSNotFound, 0))) {
    // apply formatting to TTTAttributedLabel
    [cell.textLabel addLinkToURL:[NSURL URLWithString:[NSString stringWithFormat:@"someaction://hashtag/%@", [cell.textLabel.text substringWithRange:range]]] withRange:range];
}
Run Code Online (Sandbox Code Playgroud)

注意:我收到了来自 API 的 NSRange 值以及文本字符串。

在上面我试图将格式应用于#hashtag。通常这工作正常,但因为我在字符串中包含表情符号,我相信识别的范围正在尝试格式化表情符号,因为它们实际上是 UTF 值,这在 TTTAttributedLabel 中会导致崩溃(它实际上挂起而没有崩溃,但是。 ..)

奇怪的是,如果有 1 个表情符号它可以正常工作,但如果有 2 个则中断。

谁能帮我弄清楚在这里做什么?

utf-8 nsstring ios emoji nsrange

5
推荐指数
1
解决办法
1818
查看次数

如何删除NSString中包含括号()的子字符串?

我有以下NSString:

Hello (my name is) John
Run Code Online (Sandbox Code Playgroud)

如何(my name is)快速轻松地拆卸零件?我想确保它处理只有a (然后跟随)并且不会崩溃的情况.

cocoa-touch objective-c nsstring ios nsrange

5
推荐指数
2
解决办法
2359
查看次数

在 UITextView 中获取当前段落?

我想检测当前段落,这是我目前的代码,但效果不佳。假设我有 3 个段落,当光标位于它们之间时,它会选择下一个,这是不对的。有一个更好的方法吗?

使用这段代码,我想检测当前段落,然后更改该段落的字体,然后继续使用该字体进行书写。

func textViewDidChangeSelection(textView: UITextView)
{

   // print("selected")
    //stylesDefaults()
    var arr = [String]()

    composeTextView.text.enumerateSubstringsInRange(Range(start: composeTextView.text.startIndex, end: composeTextView.text.endIndex), options: NSStringEnumerationOptions.ByParagraphs,
        { (substring, substringRange, enclosingRange, bool) -> () in arr.append(substring!)
    })

    if(composeTextView.text.characters.count != 0)
    {
        self.titleTextField.text = arr[0]
    }

    let currentRange : NSRange = composeTextView.selectedRange
    var charCounter : Int = 0
    var found : Bool = false
    for (var i = 0; i < arr.count; i++)
    {
        charCounter = charCounter + arr[i].characters.count
        if found == false
        {
            if(charCounter > currentRange.location) …
Run Code Online (Sandbox Code Playgroud)

string paragraphs uitextview nsrange swift

5
推荐指数
1
解决办法
792
查看次数

快速范围大于下限

我需要像这样实现经验过滤器

  • 0至2年
  • 2到4年

如何在快速范围内表达?

问题是我不能表达超过2至4年.虽然我可以做不到上限.比如这样

let underTen = 0.0..<10.0
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西(大于下限)

let uptoTwo = 0.0...2.0
let twoPlus = 2.0>..4.0  // compiler error
Run Code Online (Sandbox Code Playgroud)

目前我在做

let twoPlus = 2.1...4.0
Run Code Online (Sandbox Code Playgroud)

但这并不完美.

nsrange swift swift3

5
推荐指数
1
解决办法
3063
查看次数

如何在swift 3/4中使用range.map?

我有下面的代码,它适用于swift 2.3.我正在努力了解如何将其转换为swift 3/4 - 这就是问题所在 Value of type 'Range<Int>' has no member 'map'

let grainSize = CGFloat(0.01)
        let min = CGFloat(-3)
        let max = CGFloat(3)
        let range = Range<Int>(uncheckedBounds: (lower: Int(min/grainSize), upper: Int(max/grainSize)))
        let lol = NSRange(range)

        var points = range.map { step -> CGPoint in
            let i = grainSize * CGFloat(step)
            let x = x_base + (i * controller.width / 4.0)
            let y = y_base + (m * equation(i))
            if x_init == CGFloat.max { x_init = x }
            return …
Run Code Online (Sandbox Code Playgroud)

arrays nsrange swift

5
推荐指数
1
解决办法
2732
查看次数