2017-01-11 15 views
1

Так Swift 3 добавляет последовательности, следующий код работает отлично в Swift 3, однако я пытаюсь преобразовать его обратно в Swift 2,3Swift 3: Какова альтернатива для последовательности в Swift 2,3

Что бы я заменить последовательность с в быстрых 2,3?

func isWifiEnabled() -> Bool { 
     var addresses = [String]() 

     var ifaddr : UnsafeMutablePointer<ifaddrs>? 
     guard getifaddrs(&ifaddr) == 0 else { return false } 
     guard let firstAddr = ifaddr else { return false } 

     for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) { 
      addresses.append(String(cString: ptr.pointee.ifa_name)) 
     } 

     freeifaddrs(ifaddr) 
     return addresses.contains("awdl0") 
    } 
+1

http://stackoverflow.com/a/25627545/1187415 имеет код для перечисления всех интерфейсов для Swift 2 и 3. –

ответ

1

Это работало Swift 2.3, но, конечно, не работает для Swift 3

func isWifiEnabled() -> Bool { 
    var addresses = [String]() 

    var ifaddr : UnsafeMutablePointer<ifaddrs> = nil 
    guard getifaddrs(&ifaddr) == 0 else { return false } 

    var ptr = ifaddr 
    while ptr != nil { defer { ptr = ptr.memory.ifa_next } 
     addresses.append(String.fromCString(ptr.memory.ifa_name)!) 
    } 

    var counts:[String:Int] = [:] 

    for item in addresses { 
     counts[item] = (counts[item] ?? 0) + 1 
    } 

    freeifaddrs(ifaddr) 
    return counts["awdl0"] > 1 ? true : false 
} 

Изменено Я также заметил, что он перечислял awdl0 дважды? Может быть, новая вещь для iOS 10.2

+1

Это даст предупреждение «Утверждение C-стиля для устаревших версий ... " –

+0

Да, пытался выяснить, как избавиться от этого – Burf2000

+1

Вы можете использовать цикл while, как в приведенной выше ссылке. –