Enumeration - 3

Enum’larda Fonksiyon ve Initializer Kullanımı

Swift’te enum’ların üye fonksiyonları olabileceği gibi parametrik olan veya olmayan initializer’ları da olabilir. Enum’lar içerisine initializer yazmanın gerekçesi; enum’a kendi sabitlerinden birisiyle ilk değer vermektir. Aşağıda “Bilimsel” isimli enum’a örnek olarak iki farklı init() yazılmıştır.

enum Bilimsel : Float {
case g = 9.28
case e = 2.71
case pi = 3.14
init() {
self = .pi }
init (prm:Bilimsel) {
self = prm } }

Enumeration - 2

Enumeration Sıralama

enum Planet: Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
//Planet diye bir enum tanımladık. İlk değer verildikten sonra değer sıralaması kendiliğinden yapılır.

let earthsOrder = Planet.Earth.toRaw()
// Earth isimli elemanın sırası  3'e eşit.

let possiblePlanet = Planet.fromRaw(7)
// 7. sıradaki eleman Planet.Uranus'e eşit.

Enumeration - 1

Enumeration

Enumaration aynı tipteki benzer yapıların gruplamasında kullanılan yapıdır.

enum Yonler{
case dogu
case bati
case kuzey
case guney
}

enum Gezegenler{
case merkur, venus, dunya, mars, jupiter, saturn, uranus, neptun
}

var evinCephesi = Yonler.bati //uzun gösterim
evincephesi = .dogu  //kısa gösterim

Closures - Kapatmalar - 4


Bir fonksiyon ya da metot () -> T türünden bir fonksiyon parametresine sahipse onu hiç küme parantezleri olmadan çağırabiliriz. Bunun için parametre değişkeninin @autoclosure özniteliği ile niteliklendirilmesi gerekir.
Örneğin:
func foo(@autoclosure f: () -> Int){
print(f())
}
foo(10 + 20) // geçerli

Closures - Kapatmalar - 3


Bir closure dıştaki bloğun değişkenlerini kullanabilir. Closure’lar bu bakımdan iç içe fonksiyonlara benzetilebilir.
Örneğin:
var x = 10
func foo(){
let i = 20
let f: () -> Int = {() -> Int in return i * x } // let f = { i * x }
print(f())
}
foo() // 200

Closures - Kapatmalar - 2


Closure, bir fonksiyonun ya da metodun bir ifade içerisinde bildirilip kullanılması anlamına gelir.
Closure’lar fonksiyon türlerindendir. Bir closure bildirimi sanki fonksiyonu bildirip onun adresini kullanmak gibidir.

Örneğin:
var f: (Int) -> Int
f = {(a: Int) -> Int in return a * a}
işlemi  bazı ayrıntılar dışında aşağıdaki ile eşdeğerdir:
var f: (Int) -> Int
func foo(a: Int) -> Int{
return a * a
}
f = foo

Closures - Kapatmalar - 1


Closures - Kapatmalar

// C - Objective-c Blocks, Diğer dillerdeki lampda
//Fonksiyonlara benzer
Global ve iç içe kullanılmış fonksiyonlar aslında kapatmaların özel halleridir. Global fonksiyonlar adı olan fakat değer almayan kapatmalardır. İç içe (nested) fonksiyonlar ise ismi olan ve değer kullanan kapatmalardır.

Operatör Fonksiyonları


Operatör Fonksiyonları

Operatör fonksiyonları (Operator Overloading) diye bilinen bu mekanizmalar, mevcut operatörlerin davranışlarının değiştirilebilmesini sağlar. Bu sayede temel türlere ilişkin olmayan yani programcı tarafından sınıf veya yapılar bildirilerek üretilen özgü türlere ilişkin değişken veya sabitler toplama, çıkartma gibi işlemlere sokulabilir.
Swift’te operatör fonksiyonlarının yazılması ile ilgili kurallar:
  • Operatöre ait sembolün, fonksiyonun ismi olması gerekir.
  • Operatör fonksiyonları global olmalıdır. Yani bir sınıfın veya yapının üyesi olamazlar.
  • Fonksiyonun parametrik yapısı, söz konusu operatörün operand sayısı ile uyumlu olmalıdır.

Fonksiyonlar - 3

Fonksiyonlar - 3


Variable Parametreler

Fonksiyona verilen parametreye bir atama yapılamaz.
Çözümü;
func variable(sayi:Int)
{sayi= sayi * sayi} //HATA
func variable(var sayi:Int){
sayi = sayi * sayi}

Nested Fonksiyonlar


Fonksiyonlar - 2


Fonksiyonlar - 2

Önceki yazımda fonksiyonlara giriş yapmıştık. Şimdi fonksiyonlar ile ilgili diğer konulara değineceğiz.

External Parametreler

Parametrelere istenilen isimlendirmeyi yapma.
Normalde;
  1. Parametrenin açıklaması yok
  2. Parametrenin açıklaması var

Fonksiyonlar


Fonksiyonlar:

func alertGoster()
{
let alert = UIAlertView()
alert.title = “Fonksiyonlar”
alert.message = “Temel Fonksiyonlar”
alert.addButtonWithTitle(“Tamam”)
alert.show()
}
@IBAction func button1(sender:AnyObject)
{alertGoster()
}
@IBAction func button2(sender:AnyObject)
{alertGoster()
}
Not: Her iki butona tıklanıldığında üstteki fonksiyon çalışır.

Parametreli Fonksiyonlar


Decodable & Encodable

Encoding ve Decoding

JSON gibi yapıların verileri encoding ve decoding hale getirilebilir.
Swift standart kütüphanesi, veri kodlama ve kod çözme için standartlaştırılmış bir yaklaşım tanımlamaktadır. Bunlar, özel türlerde Encodable ve Decodable protokolleri uygulanarak sağlanabilir. Bu şekilde JSON verileri okuyabiliriz ya da kendi verilerimizi JSON formatına çevirebiliriz. Hem kodlamayı hemde kod çözmeyi sağlayan yapımız da Codable olmaktadır.

for in döngüsünde where ile koşul oluşturma


for in döngüsünde where ile koşul oluşturma

for in döngüsü içerisinde where anahtar sözcüğü kullanılarak koşul belirtilmesi ve uygun elemanları seçmemiz mümkündür.
Calisanlar sınıfı türündeki nesnelerden oluşan “array” isimli dizinin Firma property’sindeki değer “Apple” olan çalışanlar diğerlerinden ayrıştırılmak isteniyor:

class Calisanlar {
private var isim: String
private var firma: String
init(isim: String, firma: String) {
self.isim = isim
self.firma = firma }

Döngüler


Döngüler:

For in Döngüsü:

for sayi in 1...3{       1                                                var bitis:Int=3
print(sayi) ---------> 2                                                for sayi in 1...bitis
}                               3                                               {print(sayi) --> 1
                                                                                  }                       2
                                                                                                           3
Not: sayi değişkenine 1'den 3'e, 3te dahil sayıları at.


var dizi=[“Kars”,”İzmir”,”Sivas”,”İstanbul”]
for eleman in dizi{             Kars
print(eleman) -------------> İzmir
}                                         Sivas
                                           İstanbul

Kontrol Yapıları ve Veri İşlemleri


Kontrol Yapıları ve Veri İşlemleri:

If else Kontrol Yapısı:

var yas:Int = 13
if sayi < 10 && sayi > 5
{
print (“Sayı belirlenen aralıkta”)
}else if sayi<5
{
print(“Sayı 5 ten Küçük”)
}else
{
print(“Sayı aralığın dışında”) --> Sayı aralığın dışında
}

String Verilerle Çalışma


String Verilerle Çalışma:
Her string ifade bir diziyi temsil eder. Yani karakterler bir araya gelir ve bir dizi oluşturur.
Append (Karakter Ekleme):
var isim:String = “Ali”
var karakter:character = “@”
isim.append(karakter) --> Ali@


var isim2 = “atakan”
isim2.append(character(“+”)) --> atakan+

Operatörler


Operatörler:
Operatörler işlevlerine göre aritmetik ve lojik olmak üzere iki kategoriye ayrılır.
Aritmetik Operatörler:
var sayi = 6/2 -->3
var sayi 5/2 --> 2
var sayi:Float = 5/2 --> 2,5
var sayi1 = 5 % 2 //MOD(%) kalan bulma -->1
Arttırma Operatörü (+=)
var sayi1=1
sayi+=5
print(sayi1) --> 6

Dizi İçinde Dizi Oluşturma ve Dictionary Diziler


Önceki konumuz Diziler'in devamı...

Dizi içinde dizi oluşturma:
var dizi = [
hayvanlar”:[“kelebek”,”civciv”,”at”,”timsah”],
meyveler”:[“vişne”,”kiraz”,”portakal”,”muz”],
nesneler”:[“kalem”,”defter”,”masa”,”sandalye”]
]
Not: Dizi içinde her diziye isim verilebilir.
Meyveler dizisindeki elemanlara ulaşmak için;

dizi[“meyveler”]
print(dizi[“meyveler”]!.count) --> 4
print(dizi[“meyveler”]![2]) --> portakal
dizi[“meyveler”]!.append(“şeftali”)
print(dizi[“meyveler”]![dizi[“meyveler”]!.count-1])
-->şeftali


Dizi içinde bir diziyi silmek;
dizi.removeValue(forKey: “nesneler”)


Diziler


Diziler:
var sehirler = [“izmir”, “istanbul”, “manisa”]
var veriler = [25, 24, 23]
var dizi:[String]=[“atakan”,”cengiz”]
Not:Veri tipi boş bırakılırsa NSArray


Dizinin eleman sayısını öğrenme: sehirler.count-->3

Diziye eleman ekleme: sehirler.append(“Ankara”)
sehirler += [“Antalya”]
plakalar += [1,2,3]
En sona eleman ekleme yapılır. Çokluda eklenebilir.
Sehirler.insert(“sivas”, at:2) //3. sıraya ekler.
Not: İndeks değeri 0'dan başlar.


var dizi2 = [“kemal”,”ali”,”veli”,”kurt”,”cem”,”ayşe”,”can”]
dizi2[2...5] = [“Cem”]
print(dizi2.count) --> 4 yazar ekrana
Not: 2,3,4,5index elemanları çıkar Cem elemanı ekle.
print(dizi2) --> [“kemal”,”ali”,”neriman”,”can”]