SORU
2 HAZİRAN 2014, PAZARTESİ


Swift isteğe bağlı değeri nedir?

Apple's documentation:

if let birlikte eksik olabilir değerleri ile çalışmak için kullanabilirsiniz. Bu değerler optionals olarak gösterilir. İsteğe bağlı bir değer ya da değer içeren ya nil değeri eksik olduğunu göstermek için içerir. Soru işareti (?) isteğe bağlı olarak değeri işaretlemek için bir değer yazın, sonra yaz.

Neden isteğe bağlı bir değer kullanmak ister misiniz?

CEVAP
3 HAZİRAN 2014, Salı


Swift isteğe bağlı bir değer ya da değer ya da tutan bir değişkendir. Optionals türü için ? ekleyerek yazılır:

var myOptionalString:String? = "Hello"

"The Basics" in the Swift Programming Language:

Swift de bir değeri olmaması kolu olan isteğe bağlı türleri tanıtır. Optionals derler ya “bir değeri vardır, ve x eşittir” ya da “bir değeri yok”. Optionals Objective-C işaretçileri ile nil kullanarak benzer, ancak herhangi bir tür değil, sadece sınıflar için çalışıyorlar. Optionals daha güvenli ve Objective-C nil pointer daha fazla etkileyici ve Hızlı en güçlü özellikleri birçok yer vardır.

Optionals Swift type safe bir dil olduğu gerçeğini bir örnektir. Swift kod ile çalışabilir değerleri türleri hakkında açık olmak için yardımcı olur. Eğer kod parçası bir Dize bekliyor, tür güvenliği yanlışlıkla bir İnt geçirmeden engeller. Bu sen ve hataları mümkün olduğunca erken geliştirme sürecinde yakalamak düzeltme sağlar.

Bazı optionals yararlı yerler:

  • Bir özelliği var ya da yok edilebilir, Person a sınıfı middleName spouse gibi
  • Bir yöntem bir değer ya da hiçbir şey, geri dönmek varken, bir dizide bir maç arıyor gibi
  • Bir yöntem ya da bir sonuç ya da bir hata olsun ve hiçbir şey geri dönebilirsiniz
  • Özellikleri her zaman set olmak zorunda değil) temsilci
  • Sınıflar weak özellikler için. İşaret ettikleri şey 21 ** için ayarlanabilir
  • Büyük bir kaynak için piyasaya sürülecek bellek geri kazanmak için olabilir

DÜZENLEME:Aşağıdaki paragraflar mantıksal olarak optionals kullanarak Swift önceki bir sürümü için geçerlidir, günümüzde if let myString = myString ile verilen steno kullanmak gerekir.Boolean bir tür olarak isteğe bağlı daha fazla kullanamazsınız

if while deyim Boolean bir tür olarak isteğe bağlı kullanabilirsiniz. İşte isteğe bağlı yaratmak, sonra onun varlığı için kontrol örneği:

var myString:String? = "Hello"

if myString {
    println(myString)
}

Eğer bu isteğe bağlı olmayan bir türünü kullanarak bunu denerseniz, derleyici bir hata verecektir: "Yazın '' protokolü uymuyor'" .' LogicValue Dize

var myOtherString:String = "Hello"

if myOtherString { // Error
    println(myOtherString)
}

Eğer bir nil isteğe bağlı olmayan ayarlamak deneyin, eğer hata almak "için bir aşırı bulunamadı '__dönüşümü sağlanan bağımsız değişkeni'":

var myOtherString:String = nil // Error

Eğer bir değişken isteğe bağlı olarak bildirilmiş iseolabilirnil. Aslında tüm optionals bir şey ayarlamak kadar nil değeri ile başlar:

var possibleString:String? = "Hello"
possibleString = nil

if possibleString {
    println("It's not nil")
}

İşte optionals kullanmanın bir yolu:

var nameString:String? = "Zed" // could also be nil

if nameString {
    println("\(nameString)'s alive")
} else {
    println("Zed's dead")
}

Bir sözlük bir değerin varlığı kontrol etmek için optionals kullanabilirsiniz:

let users = [ "sjobs" : "Steve Jobs", "bgates" : "Bill Gates"]

let steve: String? = users["sjobs"]
if steve { // if steve != nil
    println("\(steve) is in the dictionary")
}

Bir değeri var olup olmadığını kontrol, ve sonra onunla bir şeyler yapmak için bir kestirme var. Bu tarzı dönüştürebilirsiniz:

let possibleName: String? = users["ballmer"]

if possibleName {
    let foundName = possibleName! // Force out value with unwrap operator (!)
    println("Name: \(foundName)")
}

..."Eğer possibleName değeri Varsa, açın ve foundName. değerini ayarlayın diyor bu kısaltma,

if let foundName = possibleName {
    println("Name: \(foundName)")
}

Ünlem işareti kullanmak "!" isteğe bağlı açılacak. Açılmamış olana kadar isteğe bağlı için çok fazla nilness kontrol hariç) kullanabilirsiniz. nil bir isteğe bağlı açılması çökmesine neden olacağını unutmayın. Bir değer paketini açmak için önce var olduğunu her zaman kontrol edin:

// Crash: fatal error: Can't unwrap Optional.
let name = possibleName!

Hızlı kılavuzu:

Bir deyimde, koşullu bir mantıksal ifade—bu if score { ... } gibi bir kod bir hata olduğu anlamına gelir, sıfır örtülü bir karşılaştırma olmalıdır.

Eğer kullanmak ve eksik olabilir değerleri ile çalışmak için izin birlikte. Bu değerler optionals olarak gösterilir. İsteğe bağlı bir değer ya da değer içeren ya da sıfır değeri eksik olduğunu göstermek için içerir. Soru işareti (?) yazmak isteğe bağlı olarak değeri işaretlemek için bir değer yazdıktan sonra.

Objective-C: aynı şeyi görmek için yararlı olabilir

NSString *myString = @"Hello";
if (myString) {
    NSLog(@"%@", myString);
}

Objective-C demek için izin ne hakkında daha fazla yumuşak."" (NO, , *0*46). yanlış Swift daha kısıtlayıcı ve bir boolean (veya "yeteneğini inceliyor" için bir boolean). bir şey istiyor Kullanarak optionals de NSNotFound gibi şeyler için de, yüzük ve -1 yanlış temsil etmek için kullanarak alır.


Daha fazla kaynak:
- The Swift Programming Guide
- Optionals in Swift (Medium)
- WWDC Session 402 "Introduction to Swift" (starts around 14:15)

Bitirmek için, burada optionals hakkında 1899 dan bir şiir:

Merdiven üzerine dün
Hiç orada olmayan bir adamla karşılaştım
Bugün de orada değildi
Uzaklara giderdi keşke keşke

Antigonish

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jack Vale Films

    Jack Vale Fi

    8 ŞUBAT 2007
  • NightShader1

    NightShader1

    25 Temmuz 2006
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008