<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Yusuf Gündüz - iOS Development, SEO, Digital Marketing etc.]]></title><description><![CDATA[Yusuf Gündüz's blog. I usually publish articles with swift and ios content.]]></description><link>https://yusufg.com.tr</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 03:11:17 GMT</lastBuildDate><atom:link href="https://yusufg.com.tr/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Swift: Önemli String Methodları]]></title><description><![CDATA[Merhaba,
Bu yazımda swift dilinde önemli yer edinmiş bazı string methodlarından bahsedeceğim. Gerek kendim için tekrar niteliğinde gerekse basit anlatımla konuyu kavramak istemek isteyen arkadaşlar için yardımcı olacağını düşünüyorum. Öyleyse başlaya...]]></description><link>https://yusufg.com.tr/swift-onemli-string-methodlari</link><guid isPermaLink="true">https://yusufg.com.tr/swift-onemli-string-methodlari</guid><category><![CDATA[string]]></category><category><![CDATA[Swift]]></category><category><![CDATA[UIkit]]></category><dc:creator><![CDATA[Yusuf Gündüz]]></dc:creator><pubDate>Mon, 09 Oct 2023 12:59:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/O2MdroNurVw/upload/f0c8db58f010b4730e086dbef281cbd5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Merhaba,</p>
<p>Bu yazımda swift dilinde önemli yer edinmiş bazı string methodlarından bahsedeceğim. Gerek kendim için tekrar niteliğinde gerekse basit anlatımla konuyu kavramak istemek isteyen arkadaşlar için yardımcı olacağını düşünüyorum. Öyleyse başlayalım.</p>
<h3 id="heading-uppercased-metodu">upperCased metodu</h3>
<p>Metni büyütmek için kullanılır ve büyüttüğü metni return etmektedir.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> str = <span class="hljs-string">"kalem"</span>
<span class="hljs-keyword">var</span> newStr = kalem.upperCased()
<span class="hljs-built_in">print</span>(newStr)
<span class="hljs-comment">// KALEM</span>
</code></pre>
<h3 id="heading-lowercased">lowerCased()</h3>
<p>upperCased methodunun tam tersidir.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> str = <span class="hljs-string">"KALEM"</span>
<span class="hljs-keyword">var</span> newStr = kalem.lowerCased()
<span class="hljs-built_in">print</span>(newStr)
<span class="hljs-comment">// kalem</span>
</code></pre>
<h3 id="heading-contains"><strong>Contains</strong></h3>
<p>Parametre olarak bir harf ister ve stringin içerisinde o harfin bulunup bulunmadığını kontrol eder.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">let</span> yusuf = <span class="hljs-string">"yusuf"</span>

<span class="hljs-keyword">var</span> sonuc = yusuf.<span class="hljs-built_in">contains</span>(<span class="hljs-string">"y"</span>)
prinnt(sonuc)
<span class="hljs-comment">// true</span>
</code></pre>
<h3 id="heading-reversed">Reversed()</h3>
<p>Reversed metodu sayesinde string ifadeyi ters şekilde yazdırabiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> str = <span class="hljs-string">"kalem"</span>

<span class="hljs-keyword">var</span> ters = <span class="hljs-type">String</span>(str.reversed())
<span class="hljs-built_in">print</span>(ters)
<span class="hljs-comment">// melak</span>
</code></pre>
<pre><code class="lang-swift"><span class="hljs-type">Count</span> <span class="hljs-type">Ozelligi</span>    

str.<span class="hljs-built_in">count</span>

<span class="hljs-comment">// 5</span>
</code></pre>
<pre><code class="lang-swift">
<span class="hljs-type">Capitalized</span> <span class="hljs-type">Ozelligi</span>

str.capitalized
<span class="hljs-comment">// Kalem</span>
</code></pre>
<pre><code class="lang-swift"><span class="hljs-type">HasPrefix</span> <span class="hljs-type">Ozelligi</span>
<span class="hljs-keyword">let</span> str = <span class="hljs-string">"Dark Knight"</span>
<span class="hljs-built_in">print</span>(str.hasPrefix(<span class="hljs-string">"Dark"</span>))
<span class="hljs-comment">// true</span>

<span class="hljs-comment">// Metnin ilk kelimesinin kontrolü amaçlı kullanılır. </span>
<span class="hljs-comment">// Hassufix özelliği ise metnin son kelimesinin o kelimeyle bitip</span>
<span class="hljs-comment">// bitmediğini kontrol etmektedir.</span>
</code></pre>
<h3 id="heading-insert-metodu">Insert Metodu</h3>
<p>String metodlarından bir tanesi de insert methodudur. String olarak belirtilmiş kelimenin belli bir yerine ekleme yapılabilir.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> str = <span class="hljs-string">"ornek"</span>

str.insert(<span class="hljs-string">"r"</span>, str.index(startIndex, offsetby:<span class="hljs-number">0</span>))
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Swift ve OOP: Bazı Başlıklar]]></title><description><![CDATA[Herkese selam,
İlk yazımda kod ekranıyla bir kere de olsa bakışmış birinin az çok aşina olduğu bir konudan bahsetmek istedim; Object Oriented Programming, Nam-ı diğer Nesne Tabanlı Programlama.
Web'te ufak bir search ile gırla sonuca ulaşabildiğimiz ...]]></description><link>https://yusufg.com.tr/swift-ve-oop-bazi-basliklar</link><guid isPermaLink="true">https://yusufg.com.tr/swift-ve-oop-bazi-basliklar</guid><category><![CDATA[oop]]></category><category><![CDATA[Swift]]></category><category><![CDATA[iOS]]></category><dc:creator><![CDATA[Yusuf Gündüz]]></dc:creator><pubDate>Thu, 05 Oct 2023 22:59:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/8qEB0fTe9Vw/upload/16c8ea916f04b9b0e4aa9885d8e7ff14.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Herkese selam,</p>
<p>İlk yazımda kod ekranıyla bir kere de olsa bakışmış birinin az çok aşina olduğu bir konudan bahsetmek istedim; Object Oriented Programming, Nam-ı diğer Nesne Tabanlı Programlama.</p>
<p>Web'te ufak bir search ile gırla sonuca ulaşabildiğimiz veya tek bir yapay zeka promptu ile fazlasıyla aydınlanacağımız bu konuyla alakalı içerik oluşturma sebebim hem kendi üslubumca anlatmak hem de tekrar niteliğinde kendime hatırlatma yapmak diyebilirim.</p>
<p>OOP pek çok modern dil gibi Swift'in de omurgasını oluşturmakta. OOP olmadan swift olmazdı diyebiliriz.</p>
<p>O zaman başlayalım;</p>
<h3 id="heading-class-yapisi"><strong>Class</strong> <strong>Yapısı</strong></h3>
<p>Classları belirli nesneleri, öğeleri veya canlı parçaları bulunan gerçek bir dünya grubu gibi düşünebiliriz. Bu gruba mensup çeşitli özellik ve davranışlara sahip öğeleri de objeler olarak düşünebiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Kahve</span> </span>{
    <span class="hljs-comment">// Aşağıdaki gibi özellikler ekleyebiliriz.</span>
    <span class="hljs-keyword">var</span> tur:<span class="hljs-type">String?</span> 

}
</code></pre>
<h3 id="heading-objects"><strong>Objects</strong></h3>
<p>Bir sınıftan meydana gelen herhangi bir şeydir. Kedi, köpek, kalem vs. Yukarıdaki örnekten devam edecek olursak örneğin Latte kahve sınıfına ait bir nesnedir. Latte tür olarak ise espresso bazlıdır.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> <span class="hljs-type">Latte</span> = <span class="hljs-type">Kahve</span>()
latte.tur = <span class="hljs-string">"Espresso Bazlı"</span>
<span class="hljs-built_in">print</span>(latte.tur!) <span class="hljs-comment">// konsol çıktısı "Espresso Bazlı" olacaktır.</span>
</code></pre>
<h3 id="heading-properties"><strong>Properties</strong></h3>
<p>Properties bir sınıfın özellikleri diyebiliriz. Yukarıdaki lattenin türü şeklinde belirttiğimiz gibi.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Kahve</span> </span>{
    <span class="hljs-comment">// Aşağıdaki gibi özellikler ekleyebiliriz.</span>
    <span class="hljs-keyword">var</span> tur:<span class="hljs-type">String?</span> 
    <span class="hljs-keyword">var</span> icim:<span class="hljs-type">String?</span>

<span class="hljs-keyword">var</span> <span class="hljs-type">Latte</span> = <span class="hljs-type">Kahve</span>()
latte.tur = <span class="hljs-string">"Espresso Bazlı"</span>
latte.icim = <span class="hljs-string">"Sıcak ve soguk icilebilir."</span>

}
</code></pre>
<h3 id="heading-inheritance">Inheritance</h3>
<p>Türkçe kaynaklarda kalıtım olarak da rastlanılabilir. Adından da anlaşılacağı üzere bir sınıfın alt sınıfı diyebiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SogukKahve</span>:<span class="hljs-title">Kahve</span> </span>{
}

<span class="hljs-keyword">let</span> coldBrew = <span class="hljs-type">SogukKahve</span>()
coldBrew.tur = <span class="hljs-string">"Filtre Kahve Bazlı"</span>
</code></pre>
<p>Ne yaptık:</p>
<p>1- Soğuk kahveyi kahve sınıfının mirası olarak gösterdik yani inheritance yapmış olduk.</p>
<p>2- coldBrew nesnesi SoğukKahve sınıfına bağlı olduğu halde kalıtım içerdiği için superclassın yani Kahve sınıfının propertiesini(coldBrew.tur) kullanmış oldu.</p>
<h3 id="heading-method-overriding">Method Overriding</h3>
<p>Kısaca özetlemek gerekirse alt sınıfın içerisinde bulunan fonksiyonun kendine has bir şekilde davranması diyebiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Kahve</span></span>{
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">demlen</span><span class="hljs-params">()</span></span>{
    <span class="hljs-built_in">print</span>(<span class="hljs-string">"demlendi"</span>)
}
}
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FiltreKahve</span>:<span class="hljs-title">Kahve</span></span>{
    <span class="hljs-keyword">override</span> <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">demlen</span><span class="hljs-params">()</span></span>{
    <span class="hljs-built_in">print</span>(<span class="hljs-string">"siparişe hazır"</span>)
}
}
</code></pre>
<p>Ne yaptık:</p>
<p>Kalıtım yoluyla aktarılmış bir sınıf fonksiyonunun override ile farklı bir şekilde işledik.</p>
<h3 id="heading-polymorphism">Polymorphism</h3>
<p>En soyut kavramlardan bir tanesidir. Çok biçimlilik diye de geçer.</p>
<p>Object Oriented Programming yaklaşımında, bir class'a ait olan bir metot inherit edilmis subclass tarafindan kullanılacagi vakit parent class'taki metodu override ederek uygulanan mantığı o subclass çapında değiştirmesine denir.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Kahve</span></span>{
    <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">demlen</span><span class="hljs-params">()</span></span>{
    <span class="hljs-built_in">print</span>(<span class="hljs-string">"demlendi"</span>)
}
}
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FiltreKahve</span>:<span class="hljs-title">Kahve</span></span>{
     <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">demlen</span><span class="hljs-params">()</span></span>{
    <span class="hljs-built_in">print</span>(<span class="hljs-string">"siparişe hazır"</span>)
}

<span class="hljs-keyword">let</span> <span class="hljs-type">Jacobs</span>:<span class="hljs-type">Kahve</span> = <span class="hljs-type">FiltreKahve</span>()
</code></pre>
<p>Ne Yaptık:</p>
<p>Jacobs değişkeni kahve türünde olsa da daha kapsayıcı şekilde davranmak için FiltreKahve sınıfına ait oldu.</p>
<h3 id="heading-type-casting">Type Casting</h3>
<p>Swift programlama dili farklı türdeki verileri tutabilmek için tipleri kullanır. Tiplere örnek olarak:</p>
<pre><code class="lang-swift"><span class="hljs-type">String</span>
<span class="hljs-type">Int</span>
<span class="hljs-type">Bool</span>
</code></pre>
<p>Oluşturacağımız her değişken için tip belirtmek zorunda değiliz. Bazen tip atamasak da otomatik olarak belirlenmektedir.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> isim:<span class="hljs-type">String</span> = <span class="hljs-string">"Ali"</span>
</code></pre>
<p>Yukarıda isim değişkeninin türünü String olarak belirtmemiş olsaydık da derleyici tarafından otomatik olarak atanacaktı.</p>
<p><strong>Type casting</strong> ise bir türü başka bir tür gibi davranmaya zorlamaktır. Upcasting ve downcasting olarak ikiye ayrılmaktadır.</p>
<p><mark>Upcasting</mark></p>
<p>Bir nesnenin kalıtımını aldığı superclass'a dönüşmesidir. Yani subclass'tan superclass'a dönüştürmektir.</p>
<p><mark>Downcasting</mark></p>
<p>Downcasting ise upcastingin tam tam tersidir diyebiliriz. Superclass'ın subclass'a dönüştürülmesidir. Force downcasting yapılırken as! kullanırken conditional casting yapılırken as? ifadesi kullanılır.</p>
<h3 id="heading-extension">Extension</h3>
<p>Varolan sınıflarımızı genişletmek için kullanırız. Kodlarınızı daha düzenli halde tutmak yani temiz bir kod için kullanabiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Motosiklet</span> </span>{
     <span class="hljs-keyword">var</span> marka:<span class="hljs-type">String</span>
     <span class="hljs-keyword">var</span> uretimSenesi:<span class="hljs-type">Int</span>

     <span class="hljs-keyword">init</span>(marka:<span class="hljs-type">String</span>, uretimSenesi:<span class="hljs-type">Int</span>)
            <span class="hljs-keyword">self</span>.marka = marka
            <span class="hljs-keyword">self</span>.uretimSenesi = uretimSenesi
}
</code></pre>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">extension</span> <span class="hljs-title">Motosiklet</span> </span>{ 
    <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">bilgiVer</span></span>{
        <span class="hljs-built_in">print</span>(<span class="hljs-string">"\(marka) marka motosiklet ilk olarak \(uretimSenesi) yılında üretilmiştir."</span>)
}
}
</code></pre>
<blockquote>
<p><em>“<strong><strong>init</strong></strong>” methodu sınıfımızda bulunan her bir değişken için bir başlangıç ​​değeri ayarlamayı sağlar.</em></p>
</blockquote>
<p>Şimdi bir adet Motosiklet sınıfına ait değişken tanımlayalım.</p>
<pre><code class="lang-swift">
<span class="hljs-keyword">var</span> ducatiMonster = <span class="hljs-type">Motosiklet</span>(marka:<span class="hljs-string">"Ducati Monster"</span>, uretimSenesi = <span class="hljs-number">2010</span>)
ducatiMonster.bilgiVer()
</code></pre>
<p>Değişkenimizi de tanımladık. Konsol çıktımız ise aşağıdaki gibi olacak.</p>
<pre><code class="lang-swift"><span class="hljs-comment">// "Ducati Monster marka motosiklet ilk olarak 2010 yılında üretilmiştir."</span>
</code></pre>
<p>Evet bu kadar. Kafamızda hemen bir soru belirmiş olabilir. Bu fonksiyonu sorunsuz bir şekilde classın içerisinde de yazabilirdik neden özellikle extensionla belirttik? Bu sorunun cevabı temiz ve daha düzenli kod yazmak olacaktır. Binlerce fonksiyonun bulunduğu bir class görünümü çok okunabilir olmayacak ve rahatsız edici olaraktır.</p>
<h3 id="heading-protocols">Protocols</h3>
<p>Protokollere belirli bir class, struct ve enum sınıfına eklenebilen ve eklendiğinde içerdiği fonksiyonları kullanma zorunluluğu kılan bir iletişim kuralı diyebiliriz. Swift dili çoklu miras özelliği desteklememekte ancak çoklu protokolu desteklemektedir. Yani bir sınıfa birden fazla protokol atanabilir.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">protocol</span> <span class="hljs-title">Motosiklet</span> </span>{
}
</code></pre>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">protocol</span> <span class="hljs-title">Naked</span> </span>{
}
</code></pre>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DucatiMonster</span>:<span class="hljs-title">Motosiklet</span>, <span class="hljs-title">Naked</span> </span>{
}
</code></pre>
<p>Yukarıda oluşturduğumuz DucatiMonster classına iki adet swift protokolü eklemiş bulunduk. Şimdi protokollerimize biraz fonksiyon ekleyelim.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">protocol</span> <span class="hljs-title">Motosiklet</span> </span>{
    <span class="hljs-keyword">var</span> ikiTekerMi:<span class="hljs-type">Bool</span>
    <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">yolculukEt</span><span class="hljs-params">()</span></span>{
}
}
</code></pre>
<p>Yukarıda protokolümüze ikiTekerMi adında bir değişken ve yolculukEt adında bir fonksiyon ekledik. Fonksiyonun içini boş bırakmış <a target="_blank" href="https://easyroids.com">olsak</a> da daha sonra class veya struct içerisinde gövdesine ekleme yapabiliriz.</p>
<pre><code class="lang-swift"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Yamaha</span>:<span class="hljs-title">Motosiklet</span></span>{
    <span class="hljs-keyword">var</span> ikiTekerMi:<span class="hljs-type">Bool</span> {<span class="hljs-keyword">get</span>}
    <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">yolculukEt</span><span class="hljs-params">()</span></span>{
        <span class="hljs-built_in">print</span>(<span class="hljs-string">"Yamaha yolculuk ediyor."</span>)
}
}
</code></pre>
<pre><code class="lang-swift"><span class="hljs-keyword">let</span> yamahaR25 = <span class="hljs-type">Yamaha</span>()

yamahaR25.yolculukEt()
</code></pre>
<pre><code class="lang-swift"><span class="hljs-comment">// "Yamaha yolculuk ediyor"</span>
</code></pre>
<p>Konsol çıktımız bu şekilde olacaktır.</p>
<h3 id="heading-closures">Closures</h3>
<p>Closure konusu swift programlama dilinde önemli yer tutmaktadır. Closures'i kısaca açıklamak gerekirse fonksiyonların kısa hali diyebiliriz. Closure'ı basitçe anlatmak için pek çok kaynak toplama işlemi üzerinden ilerlemiş, biz de öyle yapalım :)</p>
<pre><code class="lang-swift"><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">toplama</span><span class="hljs-params">(sayi1:Int, sayi2:Int)</span></span> -&gt; <span class="hljs-type">Int</span> {
    <span class="hljs-keyword">return</span> sayi1 + sayi2
}
<span class="hljs-keyword">var</span> topla = toplama(<span class="hljs-number">20</span>+<span class="hljs-number">10</span>)
<span class="hljs-built_in">print</span>(topla)
<span class="hljs-comment">// 30</span>
</code></pre>
<p>bu fonksiyonu closure olarak yazmak istersek;</p>
<pre><code class="lang-swift"><span class="hljs-keyword">var</span> topla = { (sayi1:<span class="hljs-type">Int</span>, sayi2:<span class="hljs-type">Int</span>) -&gt; <span class="hljs-type">Int</span> <span class="hljs-keyword">in</span>
    <span class="hljs-keyword">return</span> sayi1 + sayi2
}
topla(<span class="hljs-number">20</span>+<span class="hljs-number">10</span>)
<span class="hljs-built_in">print</span>(topla)
<span class="hljs-comment">// 30</span>
</code></pre>
]]></content:encoded></item></channel></rss>