2016-06-30 2 views
0

많은 양의 입력을 반복하고 있으며 특정 기준에 대해 사용자에게 표시 할 결과를 만들기 위해 일부 선을 뽑아 내고 있습니다. 기준과 일치하는 마지막 줄을 다른 색으로하고 싶습니다. 현재 나는이NSMutableAttributedString의 위치를 ​​어떻게 추적합니까?

endOfString = result.string.characters.count 
lengthOfLastString = tempResult.string.characters.count 

그리고하고 있어요 나는 내가

let changeRange = NSRange(location: endOfString+1, length: lengthOfLastString) 
result.addAttributes(singleAttribute, range: changeRange) 

을 내장 한 문자열을 표시 할 준비가하지만 지난 부는 결국 때문에이 작동하지 않을 때 String에 대한 유효한 색인의 범위. 스위프트 문자열이 더 복잡하다는 것을 일반적으로 알고 있으므로 이와 같은 작업을 수행하는 방법은 무엇입니까? 요청에 따라

샘플 데이터 : 추방

리치의

그러나 treade 낯선 사람의하는 Pathes. 우리는 이러한 공작 우리 키워드 법령을 returne 동안 트럼펫 소리,

을 함께 철수 대 및하자 왕은 그들 자신의 헬멧 & 자신의 Speares으로 누워, 그리고 모두 againe 자신의 Chaires에 backe를 returne.

"King"이라는 단어가 포함 된 줄을 알아보기 시작하고 "키워드"라는 줄을 포함하여 모든 줄을 캡처하려고합니다. "키워드"가있는 마지막 줄은 내가 다른 색을 만들고 싶습니다.

+0

질문이 이해가 가지 않습니다. 몇 가지 샘플 데이터와 하이라이트하고 싶은 라인을 포함 할 수 있습니까? –

+0

"라인"이란 무엇입니까? – matt

+0

다음과 같이 입력을 반복합니다. let lines = inString.characters.split {$ 0 == "\ n"|| $ 0 == "\ r \ n"}. map (String.init) 그래서 개행 문자부터 개행 문자까지. – mcmar

답변

1

출력 문자열을 작성하는 동안 각 행을 추가하기 전에 endIndex를 기록하십시오. 그런 다음 마지막 행을 추가하면 savedIndex..<endIndex이 찾고자하는 범위입니다.

+0

다음과 같이하면 : myRange = prevIndex .. '유형의 값을 변환 할 수 없습니다 ('Range ') to expected argument type'Range ' – mcmar

+0

인덱스 값 (미안)이 아닌 해당 문자 수를 사용하여 int 기반 범위를 작성해보십시오. 실제로 수행 한 작업과 유사하지만 끝을 지나서 증가하지 않습니다 – Feldur

관련 문제