我刚刚开始学习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) 我有一个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。有任何想法吗?
我想从数组中选择一些对象.因此我正在使用我选择的开始和结束索引.
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]'
我做错了什么?
我偶然发现了以下情况,似乎无法解决为什么这样做.请问你能解释为什么我之前不需要使用指针range吗?
NSString *d = @"The quick brown fox";
NSRange range = [d rangeOfString:@"brown"];
Run Code Online (Sandbox Code Playgroud) 我正在使用 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 个则中断。
谁能帮我弄清楚在这里做什么?
我有以下NSString:
Hello (my name is) John
Run Code Online (Sandbox Code Playgroud)
如何(my name is)快速轻松地拆卸零件?我想确保它处理只有a (然后跟随)并且不会崩溃的情况.
我想检测当前段落,这是我目前的代码,但效果不佳。假设我有 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) 我需要像这样实现经验过滤器
如何在快速范围内表达?
问题是我不能表达超过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)
但这并不完美.
我有下面的代码,它适用于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) nsrange ×10
objective-c ×5
swift ×4
ios ×3
cocoa-touch ×2
nsstring ×2
string ×2
arrays ×1
emoji ×1
integer ×1
iphone ×1
nsindexset ×1
paragraphs ×1
pointers ×1
swift3 ×1
uitextview ×1
utf-8 ×1