Как получить несколько атрибутов из одной и той же функции? - PullRequest
0 голосов
/ 02 октября 2018

Я использую attributed text следующим образом:

let formated = textAnhorig.formatHyperlink(text: "click HERE and HERE", link: www.test.com, linkStart: 6, linkEnd: 9)

detailText.attributedText = formated

Используя эту функцию:

func formatHyperlink(text: String, link: String, linkStart: Int, linkEnd: Int) { 
    let attributed = NSMutableAttributedString(string: text) 
    let url = URL(string: link) 
}

Проблема в том, что я хочу иметь две (или более) ссылки втекст (второй ЗДЕСЬ).Но я не могу вызвать функцию во второй раз.Нужно ли мне добавить несколько аргументов, например:

let formated = textAnhorig.formatHyperlink(text: "click HERE and HERE", link: www.test.com, linkStart: 6, linkEnd: 9, link2: www.test2.com, linkStart: 15, linkEnd18)

Есть ли лучший, более динамичный способ, верно?

ОБНОВЛЕНИЕ Естьпредложение отправить ссылки в виде словарей в массиве, но я не знаю, как его распаковать:

var dict1 = ["link": "www.test.com", "start": 0, "end": 10] as [String : Any] 
var dict1 = ["link": "www.test2.com", "start": 22, "end": 66] as [String : Any] 
var array = [dict1, dict2]


for i in array { 
    let url = URL(string: array[i["link"]]) 
    attributed.setAttributes([.link: url], range: NSMakeRange(array[i["start"]], array[i["end"]])) 
}

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать Array, а затем улучшить func formatHyperlink(text: String, link: String, linkStart: Int, linkEnd: Int)

Как насчет использования structure:

struct LinkAttributes {
    let url: String
    let range: NSRange
}

Тогда:

func formatHyperlink(text: String, links: [LinkAttributes]) {

    //Construct the NSMutableAttributedString

    for aLinkAttribute in LinkAttributes {
        attributedString.addAttribute(.link, value: aLinkAttribute.url, range: aLinkAttribute.range)
    }
}

Вызов:

formatHyperlink(text: "someString", 
                links:[LinksAttributes(url: url1, range: NSMakeRange(location: 0, end: 10)), 
                       LinksAttributes(url: url1, range: NSMakeRange(location: 22, end: 66))]

Примечание: код не проверен, возможно, не скомпилируется для тривиальной ошибки опечатки.

...