Цикл через CFArray of CFURL - PullRequest
       17

Цикл через CFArray of CFURL

0 голосов
/ 25 июня 2019

Используя Swift, я пытаюсь перебрать CFArray из CFURL, но получаю ошибку EXC_BAD_INSTRUCTION.

let apps = LSCopyApplicationURLsForURL(NSURL(string: "http://www.yahoo.com")! as CFURL, LSRolesMask.all)!

let finalArray = apps.takeRetainedValue()

let count = CFArrayGetCount(finalArray)

for ix in 0...count-1 {
    let url = CFArrayGetValueAtIndex(finalArray, ix) as! CFURL
    print(url)
}

Что я делаю не так?

1 Ответ

2 голосов
/ 25 июня 2019

Вы действительно хотите остаться в пропасти CoreFoundation? ? Приведите массив к [URL]

if let apps = LSCopyApplicationURLsForURL(URL(string: "http://www.yahoo.com")! as CFURL, LSRolesMask.all)?.takeRetainedValue() {
    for url in apps as! [URL] {
        print(url)
    }
}

Кстати, ошибка возникает из-за того, что CFArrayGetValueAtIndex возвращает указатель, который не может быть приведен к CFURL

Вы должны написать что-то вроде

for ix in 0..<count {
    let url = unsafeBitCast(CFArrayGetValueAtIndex(finalArray, ix), to: URL.self)
    print(url)
}
...