Swift Notları — 5 String Metotlar ( Fonksiyonlar )
Birçok yazılım dilinde olduğu gibi Swift dilinde string metotlar oldukça önemli. Dilin genel string metotları dışında özel bir indexleme mantığı da var. Genel olarak metotlar ve kullanımları şu şekilde:
uppercased
Mevcut metni büyültür ve büyüttüğü metni return eder.
let name = "Iron Maiden"
let newName = name.uppercased()// IRON MAIDEN
lowercased
Mevcut metni küçültür ve küçülttüğü metni return eder.
let name = "GoJiRa"
let newName = name.lowercased()// gojira
Contains
Dışarıdan bir karakter alan ve bu karakterin mevcut metinde olup olmadığına bakan metot. Metot boolean bir değer return eder.
let name = "Furtherial"let result : Bool = name.contains("e")//true olarak return eder.
Index Mantığı ( Indices )
Swift dilinde string bir metnin herhangi bir karakterine karşılık dilde String.Index adında bir struct mevcut. Yani her karakterin özel bir index karşılığı var ve bu karşılık bazı dillerde alıştığımız gibi int bir değer DEĞİL. Dil karakter karşılıklarında özel bir sözdizimi kullandığı için sayısal bir değer kullanılmadığını belirtiyor. Karakter depolamada bellek kullanımının böylelikle daha sağlıklı olduğunu belirtmekte. Kaynak olarak aşağıya bazı linkleri bırakıyorum
startIndex özelliği
Metnin ilk karakterinin index karşılığını verir.
let name = "Lamb of God"let startIndex : String.Index = name.startIndex
endIndex özelliği
Metnin son karakterinin index karşılığını verir.
let name = "Asafated"let endIndex : String.Index = name.endIndex
firstIndex
Metot içerisine aldığı karakterin index numarasını bize verir. Eğer metnin içerisinde birden fazla karakter varsa bunlardan ilkinin index numarasını verir.
let name = "Rotting Christ"
let indexNo = name.firstIndex(of: "t")
Not: Eğer herhangi bir index bulamazsa nil döner.
lastIndex
Metot içerisine aldığı karakterin index numarasını bize verir. Eğer metnin içerisinde birden fazla karakter varsa bunlardan sonuncusunun index numarasını verir.
let name = "Dimmu Borgir"
let indexNo = name.firstIndex(of: "t")
Not: Eğer herhangi bir index bulamazsa nil döner.
Index
Index metodu string parçalama işlerinde en çok kullanılan metot. ( Diğer dillerdeki subString mantığını da düşünebiliriz. )
Örneğin mevcut karakterden belirli bir uzunluktan sonraki karakterin index numarasını bulmak istiyoruz. Aşağıdaki metinde telefonun son iki numarasını bulmak istediğimizi varsayalım.
let name = "Amon Amarth!"let startIndex = name.startIndex//Bu kod bloğu ile ikinci kelimenin baş harfinin index numarasını bulduklet index = name.index(startIndex, offsetBy: 5)
Range Mantığı
Bulunan index numaraları ile çeşitli syntax lar kullanarak metnin belirli bir aralığını almamız mümkün. Yukarıdaki koda devam edip birinci kelimeyi ekrana yazdırmak istersek :
let name = "Amon Amarth!"let startIndex = name.startIndex//Bu kod bloğu ile ikinci kelimenin baş harfinin index numarasını bulduklet index = name.index(startIndex, offsetBy: 5)let result = name[..<index]//result değişkeni ekrana "Amon" yazacaktır.
Bir diğer örnekte ise firstIndex ve lastIndex kullanarak belirli bir aralık tanımlayacağız ve o aralıktaki metni alacağız
let university = "Bahçeşehir Üniversitesi"let startUniIndex = university.firstIndex(of: "Ü")let endUniIndex = university.lastIndex(of: "s")let range = startUniIndex!..<endUniIndex!let uniResult = university[range]
prefix
Metot dışarıdan aldığı index numarasına kadar olan metni ekrana yazdırır. upTo label ını kullanarak yukarıdaki örneğin farklı bir yanıtını yazabiliriz.
let result = hello.prefix(upTo: index)
let result let result = hello.prefix(4)
suffix
Bu metot prefixin tersine index numarasına kadar olan metni alırken son karakterden başlar. Sondan belirtilen index numarasına göre gidip o metni alır.
let index = name.index(startIndex, offsetBy: 4)let result = name.suffix(from: index)
Diğer Metotlar ve Özellikler
append
Mevcut bir metne başka bir metin eklemek için kullanılabilir.
var name = "Razor "
var secondName = "Offical"
name.append(secondName)
print(name)
count özelliği
Metindeki karakter sayısını alır.
var name = "Pantera"print(name.count)
capitalized
Bu özellik mevcut metnin ilk karakterini büyültür. Özellikle isim, soyisim gibi işlemlerde oldukça kullanılır.
hasPrefix
Bu metot metnin o kelimeyle başlayıp başlamadığını kontrol eder ve ona göre true veya false döner.
let name = "Parkway Drive"
print(name.hasPrefix("Parkway"))
hasSuffix
Bu metot metnin o kelimeyle bitip bitmediğini kontrol eder ve ona göre true veya false döner.
let name = "Ghost Brigade"
print(name.hasSuffix("Brigade"))
elementsEqual
İki metni karşılaştırıp metinler aynı ise true değilse false döner. trimmingCharacters
var name1= "Megaherz"
var name2 = "Megaherz"var result = name1.elementsEqual(name2)print(result)
// Output: true
trimmingCharacters
Metnin başlamadan önceki ve bittikten sonraki boşluklarını temizler.
var message = " Bruce Dickinson is very funny "// remove leading and trailing whitespaces
var newMessage = message.trimmingCharacters(in: .whitespaces)print(newMessage)
// Output: Bruce Dickinson is very funny
split
Split metodu ile metnin içerisinde belirtilen karakterlere göre metni bir diziye çevirir.
var text = "Swift is a fun programming language"// split the text from space
print(text.split(separator: " "))// Output: ["Swift", "is", "a", "fun", "programming", "language"]
reversed
Mevcut metindeki karakterleri ters çevirir.
let name = "Machine Head"let result = String(name.reversed())print(result)// Output: edagirB tsohG
replacingOccurrences
Bu metot ile hedef bir karakteri veya metni belirttiğimiz karakter veya metinle replace edebiliriz.
import Foundation
var str1 = "bat ball"// replace b with c
print(str1.replacingOccurrences(of: "b",with: "c"))// Output: cat callvar text = "Java is awesome. Java is fun."// all occurrences of "Java" is replaced with "Swift"
var new = text.replacingOccurrences(of:"Java", with: "Swift")print(new)// "Python" is not the substring of text , so returns original string
var new1 = text.replacingOccurrences(of:"Python", with: "Swift")print(new1)