2015-09-05 18 views
5

Sadece 2.0 sürümüyle güncellenmiş ve bir hata yaşıyorum.'array' kullanılamıyor: lütfen tembel dizinizden bir Dizi oluşturun: Array (...) error

alıyorum hatadır: 'dizisi' kullanılamaz: Tembel dizisinden bir dizi inşa edin: Array (...)

Benim kodudur:

  if let credentialStorage = session.configuration.URLCredentialStorage { 
      let protectionSpace = NSURLProtectionSpace(
       host: URL!.host!, 
       port: URL!.port?.integerValue ?? 0, 
       `protocol`: URL!.scheme, 
       realm: URL!.host!, 
       authenticationMethod: NSURLAuthenticationMethodHTTPBasic 
      ) 
// ERROR------------------------------------------------↓ 
      if let credentials = credentialStorage.credentialsForProtectionSpace(protectionSpace)?.values.array { 
// ERROR------------------------------------------------↑ 
       for credential: NSURLCredential in (credentials) { 
        components.append("-u \(credential.user!):\(credential.password!)") 
       } 
      } else { 
       if let credential = delegate.credential { 
        components.append("-u \(credential.user!):\(credential.password!)") 
       } 
      } 
     } 

misiniz Swift 2.0 için güncellenmesi gereken bu kod satırı nasıl değiştirileceğini bilen var mı?

if let credentials = credentialStorage.credentialsForProtectionSpace(protectionSpace)?.values.array

+0

sizin xcode hangi versiyonu Swift 2.0 başlatıcı kullanılsın mı? – pixyzehn

+0

Oyunumda çalışıyor. – pixyzehn

+0

@pixyzehn bu sürüm 7 beta 6 – Bills

cevap

9

hata devletler olarak, Array oluşturmalıdır. Deneyin: Swift1.2 yılında

if let credentials = (credentialStorage?.credentialsForProtectionSpace(protectionSpace)?.values).map(Array.init) { 
    //... 
} 

, valuesDictionary<Key, Value> getirilerine Array<Value> dönen .array özelliğine sahiptir LazyForwardCollection<MapCollectionView<[Key : Value], Value>> türü. Biz Array(dict.values) ile Array gerçekleştirebilmesi nedeniyle Dictionary<Key, Value> getiri LazyMapCollection<[Key : Value], Value> ve .array mülkiyet Swift2 yılında

, values terk edilmiş.

Bu durumda, credentialStorage?.credentialsForProtectionSpace(protectionSpace)?.values, Optional türüne sahip olduğundan, sadece Array(credentialStorage?.cre...) kodlayamazız. Bunun yerine, bir Array istiyorsanız, Optional numaralı telefondan map()'u kullanmalıyız.

Ancak, bu özel durumda, credentialStorage?.credentialsForProtectionSpace(protectionSpace)?.values olduğu gibi kullanabilirsiniz.

Dene:

if let credentials = credentialStorage?.credentialsForProtectionSpace(protectionSpace)?.values { 
    for credential in credentials { 
     //... 
    } 
} 

LazyMapCollectionSequenceType uygundur çünkü bu işler.

+1

(dict.keys) .map (Array.init) 'benim için çalışmadı (sona erdim 'Element' çıkarım hataları ile) ama '[MyType] (dict.keys)' çalıştı (burada bulundu: http://stackoverflow.com/a/32243072/63582) – wmmeyer

0

guard let values = credentialStorage?.credentialsForProtectionSpace(protectionSpace)?.values else { return } 
let credentials = Array<NSURLCredential>(values) 
for credential in credentials { 
    // `credential` will be a non-optional of type `NSURLCredential` 
}