СпектрVersus String.Index - PullRequest
       27

СпектрVersus String.Index

2 голосов
/ 11 июля 2019

У меня проблема с пониманием разницы между Range-String.Index- и String.Index

Например:

func returnHtmlContent() -> String {
    let filePath = URL(string:"xxx.htm")
    filePath?.startAccessingSecurityScopedResource();
    let htmlFile = Bundle.main.path(forResource: "getData", ofType: "htm");
    let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8);
    filePath?.stopAccessingSecurityScopedResource();
    return html;
};
func refactorHtml(content: String) -> String {
    let StartingString = "<div id=\"1\">";
    let EndingString   = "</div></form>";

    func selectString() -> String {
        var htmlContent = returnHtmlContent();
        let charLocationStart = htmlContent.range(of: StartingString);
        let charLocationEnd   = htmlContent.range(of: EndingString);

        htmlContent.remove(at: charLocationStart);
        return htmlContent;
    };
    let formattedBody = selectString();
    return formattedBody;
};
refactorHtml(content: returnHtmlContent());

Идея в псевдокоде

Generated HTMLBody
Pass To Function that formats
Remove all characters before StartingString
Remove all Characters After EndingString
Send NewString to Variable

Теперь - когда я пытаюсь найти позицию индекса, я не могу получить правильный тип значения, это ошибка, которую я получаю

Cannot convert value of type 'Range<String.Index>?' to expected argument type 'String.Index'

Это работает на детской площадке

1 Ответ

0 голосов
/ 11 июля 2019

Строковые индексы не являются целыми числами.Это непрозрачные объекты (типа String.Index), которые можно использовать для вставки в строку для получения символа.

Диапазоны не ограничиваются только Range<Int>.Если вы посмотрите на объявление Range, вы увидите, что оно является общим для любого Bound, если Bound равно Comparable (что String.Index).

Так что Range<String.Index> это просто так.Это диапазон строковых индексов, и, как и любой другой диапазон, он имеет lowerBound и upperBound.

...