...要するにSWIFT LLDBは、コードの実行から正しい結果が、異なる結果を生成し、私は奇妙な行動を経験してい
- アプリケーションコード
currIndexPlaceA = a!.startIndex.successor()..<newText.endIndex;
内(
Range<Index>
上)このコマンドを実行します
は、私は、このコマンドの後にブレークポイントを設定すると...
無視し、デバッグウィンドウでpo a
(lldb)を実行している、私が取得:
▿オプション>▿一部:レンジ(39 .. < 44) - のstartIndex:39 - endIndexの:44
po currIndexPlaceA
がありながら:
▿レンジ(5 .. < 54) - のstartIndex:5 - endIndexの:54
startIndexのは、高いトンされている必要があることは明らかですハン39!
しかし、lldb窓を通して同じコマンドを実行する:(po currIndexPlaceA
)で
expr currIndexPlaceA = a!.startIndex.successor()..<newText.endIndex;
結果:
▿範囲(40 .. < 54) - のstartIndex:40 - endIndex:54
ここでは何が起こっているのですか?
あなたは私の完全な機能をデバッグしたい場合は...それは頭痛のようなものだ - それは、XMLパーサの一種だ...
私はテキストとそれをテスト:<id><id></id><id/><id /><id><id /><id/><id></id></id></id>
とtagNameを:id
func getTagContent(text : String, tagName : String) -> [String!]!{
// Extracts reply
var newText = text;
var currProcessing = text;
var retVal = [String!]();
while (newText != ""){
let rangeFirst = newText.rangeOfString("<" + tagName, options: [], range: nil, locale: nil);
if let actrange = rangeFirst
{
newText = newText.substringFromIndex(actrange.startIndex.advancedBy(tagName.characters.count + 1));
let rangeEndFirstTag = newText.rangeOfString(">");
if let actRangeEndFirstTab = rangeEndFirstTag {
let distToCloseTag = newText.startIndex.distanceTo(actRangeEndFirstTab.startIndex)
if (distToCloseTag == 0 || (distToCloseTag > 0 && newText[actRangeEndFirstTab.startIndex.predecessor()] != "/")) {
newText = newText.substringFromIndex(actRangeEndFirstTab.startIndex.advancedBy(1));
var currIndexPlaceA = newText.startIndex..<newText.endIndex;
var currIndexPlaceB = newText.startIndex..<newText.endIndex;
var a = newText.rangeOfString("</" + tagName + ">", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceA, locale: nil);
if a == nil {a = newText.rangeOfString("</" + tagName + " ", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceA, locale: nil);}
var b = newText.rangeOfString("<" + tagName + ">", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);
if b == nil {b = newText.rangeOfString("<" + tagName + " ", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);}
while (a != nil && b != nil && b?.startIndex < a?.startIndex){
let txt = newText.substringFromIndex(b!.endIndex);
var closedTag = false;
if let tmpRagne = txt.rangeOfString(">"){
if (tmpRagne.startIndex > txt.startIndex){
if (txt[tmpRagne.startIndex.predecessor()] == "/"){
closedTag = true;
}
}
}
if closedTag{
currIndexPlaceB = b!.startIndex.successor()..<newText.endIndex;
var b = newText.rangeOfString("<" + tagName + ">", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);
if b == nil {b = newText.rangeOfString("<" + tagName + " ", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);}
}
else{
currIndexPlaceA = a!.startIndex.successor()..<newText.endIndex;
currIndexPlaceB = b!.startIndex.successor()..<newText.endIndex;
var a = newText.rangeOfString("</" + tagName + ">", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceA, locale: nil);
if a == nil {a = newText.rangeOfString("</" + tagName + " ", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceA, locale: nil);}
var b = newText.rangeOfString("<" + tagName + ">", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);
if b == nil {b = newText.rangeOfString("<" + tagName + " ", options: NSStringCompareOptions.LiteralSearch, range: currIndexPlaceB, locale: nil);}
}
}
if a == nil { return nil; }
currProcessing = newText.substringToIndex(a!.startIndex);
retVal.append(currProcessing);
newText = newText.substringFromIndex(a!.startIndex.successor());
if let lastRange = newText.rangeOfString(">"){
newText = newText.substringFromIndex(lastRange.endIndex);
}
else {
return nil;
}
}
else{
newText = newText.substringFromIndex(actRangeEndFirstTab.startIndex.successor());
retVal.append(nil);
}
}
}
else {
break;
}
}
return retVal;
}
をところで、スウィフトは '使用していません;'コード行の終わりをマークします。 –
それは構文が賢明です、私は私の一日を通して4つの異なる言語を使用しているので、私はそれを使用して好きですそれを置くことは私のために変です...これは問題ではありません... – evenro
P.s.私はまた、通常、リンゴは奇妙なことをお勧めしませんが、カッコ内に条件を入れて、いくつかのシナリオでは、それをコンパイルすることはできません... – evenro