Swift Seçeneği: Nasıl Kullanılır (Örneklerle)

Bu makalede, isteğe bağlı, kullanım durumları ve Swift'deki isteğe bağlı kullanım hakkında bilgi edineceksiniz.

Önceki makalede, Swift'de bulunan farklı veri türleri hakkında bilgi edindik ve bu türlerin değişken veya sabitinin varsayılan bir değer içerdiğini fark ettik.

Misal:

 let someValue = Int () print (someValue) 

Programı çalıştırdığınızda, çıktı:

 0

Ancak Swift'de, varsayılan değeri boş bir değer ( nil) olan İsteğe Bağlı adlı başka bir veri türü vardır . Bir değişkenin veya sabitin içinde değer içermemesini istediğinizde isteğe bağlı kullanabilirsiniz. İsteğe bağlı bir tür bir değer içerebilir veya bir değer içermeyebilir (boş bir değer).

Teknik olmayan bir şekilde, isteğe bağlı olarak bir ayakkabı kutusu olarak düşünebilirsiniz. Ayakkabı kutusunda bir ayakkabı olabilir veya olmayabilir. Bu yüzden ayakkabıya kutudan ulaşırken önceden bilmelisiniz.

Opsiyonel nasıl ilan edilir?

Sadece ekleyerek İsteğe Bağlı olarak bir veri tipini temsil edebilir !ya da ?hiç Type. İsteğe bağlı bir değer, içinde bir değer içeriyorsa, değeri Optional, değilse, döndürdüğü gibi döndürür nil.

Örnek 1: Swift'de nasıl isteğe bağlı ilan edilir?

 var someValue:Int? var someAnotherValue:Int! print(someValue) print(someAnotherValue) 

Programı çalıştırdığınızda, çıktı:

 sıfır sıfır

Yukarıdaki programda, ?ve kullanarak isteğe bağlı bir türü başlattık !. Her iki yol da isteğe bağlı bir oluşturmak için geçerlidir, ancak aşağıda inceleyeceğimiz önemli bir fark vardır.

İsteğe bağlı bir Int bildirmek, değişkenin bir tamsayı değerine sahip olacağı veya hiç değeri olmayacağı anlamına gelir. Değişkene hiçbir değer atanmadığından , ekranda her iki printifade çıktısını da görebilirsiniz nil.

Örnek 2: İsteğe bağlı bir değerden bir değer atama ve bu

 let someValue:Int? = 5 print(someValue) print(someValue!) 

Programı çalıştırdığınızda, çıktı:

 İsteğe bağlı (5) 5 

Yukarıdaki programda, isteğe bağlı bir Inttip belirledik ve ona 5 değeri atadık.

Gördüğünüz gibi, opsiyonel baskı olarak print(someValue)sizi vermez 5ama Optional(5). Yukarıda tarif edildiği gibi bu biçimde olabilir: Optional. Ondan erişmek için , sarmalama adı verilen bir mekanizmaya ihtiyacımız var .

Bir !sonraki satırda olduğu gibi değişken / sabitin sonuna bir karakter ekleyerek isteğe bağlı olanı açabilirsiniz print(someValue!). ekrandaki print(someValue!)isteğe bağlı ve çıktıları açar 5.

Bununla birlikte, bu tür bir sarmalama mekanizmasının yalnızca, isteğe bağlı olanın ona eriştiğinizde bir değeri olacağından emin olduğunuzda kullanılması gerektiğini unutmayın.

Örnek 3: Sarılmamış bir isteğe bağlı olarak açıkça beyan etme

Ayrıca şu şekilde sarmalanmamış bir isteğe bağlı oluşturabilirsiniz:

 let someValue:Int! = 5 print(someValue) 

Programı çalıştırdığınızda, çıktı:

 5

Yukarıdaki programda, Int!her seferinde !karakteri eklemenize gerek kalmaması için, siz eriştiğinizde değeri otomatik olarak açan, sarılmamış bir isteğe bağlı oluşturur .

Bu tür isteğe bağlı seçenekleri kullanırken emin olun, değişkene eriştiğinizde değişkenin her zaman bir değere sahip olması gerekecektir. Aksi takdirde, ölümcül bir hata çökmesi yaşarsınız.

Örnek 4: Kaydırılmamış boş bir isteğe bağlı erişilirken önemli hata

 var someValue:Int! var unwrappedValue:Int = someValue //crashes due to this line 

Programı çalıştırdığınızda, ölümcül bir hata olarak bir çökme alırsınız : Kod unwrappedValue:Int = someValue, İsteğe Bağlı birDeğerden wrappedValue değişkenine değer atamaya çalıştığından, isteğe bağlı bir değeri açarken beklenmedik şekilde sıfır bulundu .

Ancak bir değer Optional, nildeğer içeren bir türdür . UnrappedValue değişkenine isteğe bağlı olmayan nil değeri atamaya çalışmak çökmeye neden olacaktır.

Bu durumu ele almak için aşağıda açıklanan farklı teknikler vardır.

İsteğe Bağlı Taşıma

İsteğe bağlı bir değeri kullanmak için, paketin kaldırılması gerekir. İsteğe bağlı değeri kullanmanın daha iyi yolu, !operatörü kullanarak sarmayı açmaya zorlamak yerine koşullu sarmalamadır .

Bunun nedeni, koşullu olarak sarılmanın sormasıdır Bu değişkenin bir değeri olup olmadığını kontrol edin? . Cevabınız evet ise, değeri verin, aksi takdirde sıfır durumunu ele alacaktır.

Aksine, force unrapping, bu değişkenin siz onu kullanırken bir değeri olduğunu söylüyor . Bu nedenle, sıfır olan bir değişkeni açmaya zorladığınızda, programınız isteğe bağlı bir özel durumu çözerken beklenmedik bir şekilde bulunan bir sıfır atar ve çöker . Koşullu sarmalama tekniklerinden bazıları aşağıda açıklanmıştır:

1. If-ifadesi

You can use if statement and compare optional with nil to find out whether a optional contains a value or not. You can use the comparison operator "equal to" operator (==) or the "not equal to" operator (!=) in the if statement.

Example 5: Optional handling with if else statement

 var someValue:Int? var someAnotherValue:Int! = 0 if someValue != nil ( print("It has some value (someValue!)") ) else ( print("doesn't contain value") ) if someAnotherValue != nil ( print("It has some value (someAnotherValue!)") ) else ( print("doesn't contain value") ) 

When you run the program, the output will be:

 doesn't contain value It has some value 0 

In the above program, the code inside if statement executes if an optional contain a value, otherwise the statement inside the else block executes. The major drawback of optional handling using this technique is, you still need to unwrap the value from optional using ! operator.

2. Optional Binding (if-let)

Optional binding helps you to find out whether an optional contains a value or not. If an optional contains a value, that value is available as a temporary constant or variable. Therefore, optional binding can be used with if statement to check for a value inside an optional, and to extract that value into a constant or variable in a single action.

Example 5: Optional handling using if let statement

 var someValue:Int? var someAnotherValue:Int! = 0 if let temp = someValue ( print("It has some value (temp)") ) else ( print("doesn't contain value") ) if let temp = someAnotherValue ( print("It has some value (temp)") ) else ( print("doesn't contain value") ) 

When you run the program, the output will be:

 doesn't contain value It has some value 0 

In the above program, the code inside if statement executes if the optional contains a value. Otherwise the else block gets executed. The if-let statement also automatically unwraps the value and places the unwrapped value in temp constant. This technique has major advantage because you don't need to forcely unwrap the value although being certain an optional contains a value.

3. Guard statement

You can use guard to handle optionals in Swift. Don't worry if you don't know what guard is. For now, just think of guard as an if-else condition with no if block. If the condition fails, else statement is executed. If not, next statement is executed. See Swift guard for more details.

Example 6: Optional handling using guard-let

 func testFunction() ( let someValue:Int? = 5 guard let temp = someValue else ( return ) print("It has some value (temp)") ) testFunction() 

When you run the program, the output will be:

 It has some value 5

In the above program, the guard contains a condition whether an optional someValue contains a value or not. If it contains a value then guard-let statement automatically unwraps the value and places the unwrapped value in temp constant. Otherwise, else block gets executed and and it would return to the calling function. Since, the optional contains a value, print function is called.

4. Nil-coalescing operator

In Swift, you can also use nil-coalescing operator to check whether a optional contains a value or not. It is defined as (a ?? b). It unwraps an optional a and returns it if it contains a value, or returns a default value b if a is nil.

Example 7: Optional handling using nil-coalescing operator

 var someValue:Int! let defaultValue = 5 let unwrappedValue:Int = someValue ?? defaultValue print(unwrappedValue) 

When you run the program, the output will be:

 5

Yukarıdaki programda, someValue değişkeni isteğe bağlı olarak tanımlanmıştır ve sıfır değeri içerir. Sıfır birleştirme operatörü isteğe bağlı olanı açmayı başaramaz, bu nedenle defaultValue döndürür. Bu nedenle, ifade print(unwrappedValue)konsolda 5 çıktı verir.

 var someValue:Int? = 10 let defaultValue = 5 let unwrappedValue:Int = someValue ?? defaultValue print(unwrappedValue) 

Programı çalıştırdığınızda, çıktı:

 10

Bununla birlikte, yukarıdaki programda, isteğe bağlı değişken someValue, 10 değeri ile başlatılır. Bu nedenle, sıfır birleştirme operatörü, birDeğerden değeri başarıyla çözer. Bu nedenle, ifade someValue ?? defaultValue10 döndürür ve ifade print(unwrappedValue)konsolda 10 değerini verir.

Ilginç makaleler...