{"id":1936,"date":"2014-12-29T19:40:34","date_gmt":"2014-12-29T17:40:34","guid":{"rendered":"http:\/\/koddit.com\/?p=1936"},"modified":"2015-04-27T22:44:26","modified_gmt":"2015-04-27T19:44:26","slug":"ios-uygulama-gelistirme-3-swift-vs-objective-c","status":"publish","type":"post","link":"https:\/\/blog.koddit.com\/en\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/","title":{"rendered":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C"},"content":{"rendered":"<p style=\"text-align: justify\">Swift ile birlikte \u00f6zellikle iOS uygulama geli\u015ftirmeye yeni ba\u015flamay\u0131 d\u00fc\u015f\u00fcnen\u00a0pek \u00e7ok ki\u015finin kafas\u0131 kar\u0131\u015ft\u0131. iOS uygulama geli\u015ftiricileri de Swift \u00f6\u011frenip \u00f6\u011frenmemek konusunda karars\u0131z. Bu yaz\u0131da biraz fikir verebilmek ad\u0131na Objective-C ve Swift&#8217;i \u00e7e\u015fitli a\u00e7\u0131lardan kar\u015f\u0131la\u015ft\u0131rd\u0131m.<\/p>\n<h2 style=\"text-align: justify\">Tarih\u00e7e<\/h2>\n<h3 style=\"text-align: justify\">Objective-C<\/h3>\n<div style=\"width: 171px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" src=\"https:\/\/blog.koddit.com\/wp-content\/plugins\/wp-images-lazy-loading\/images\/grey.gif\" data-original=\"http:\/\/virtualschool.edu\/cox\/pix\/Brad.png\" alt=\"\" width=\"161\" height=\"223\" \/><p class=\"wp-caption-text\"><noscript><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/virtualschool.edu\/cox\/pix\/Brad.png\" alt=\"\" width=\"161\" height=\"223\" \/><\/noscript> Objective-C&#8217;yi geli\u015ftiren Brad Cox<\/p><\/div>\n<p style=\"text-align: justify\">Her k\u00f6\u015feden ba\u015fka bir nesneye y\u00f6nelimli programlama (NYP) dilinin f\u0131rlad\u0131\u011f\u0131 g\u00fcn\u00fcm\u00fcz\u00fcn <a href=\"http:\/\/en.wikipedia.org\/wiki\/List_of_object-oriented_programming_languages\">aksine<\/a>\u00a01970\u2019lerin sonu, 1980\u2019lerin ba\u015f\u0131nda en yayg\u0131n ve kullan\u0131labilir NYP dili Smalltalk\u2019du. NYP\u2019ya duyulan ihtiyac\u0131n artmas\u0131 ve kullan\u0131m\u0131n\u0131n yayg\u0131nla\u015fmas\u0131yla birlikte \u00e7e\u015fitli bilim adamlar\u0131 d\u00f6nemin ve g\u00fcn\u00fcm\u00fcz\u00fcn <a href=\"http:\/\/www.tiobe.com\/index.php\/content\/paperinfo\/tpci\/index.html\">en pop\u00fcler programlama dili<\/a> olan C\u2019ye NYP mant\u0131\u011f\u0131n\u0131 eklemek i\u00e7in kollar\u0131 s\u0131vad\u0131lar. Danimarkal\u0131 bilgisayar bilimci Bjarne Stroustrup C++\u2019\u0131 geli\u015ftirirken Brad Cox\u2019da 1982\u2019de Objective-C\u2019yi geli\u015ftirmeye ba\u015flad\u0131. Cox ve i\u015f arkada\u015f\u0131 Tom Love uzun \u00e7al\u0131\u015fmalar sonucu 1986\u2019da Objective-C\u2019yi resmi olarak yay\u0131nlad\u0131lar.<\/p>\n<p style=\"text-align: justify\">Bu s\u0131rada 1985\u2019de Apple\u2019dan kovulan Steve Jobs, NeXT isimli bir \u015firket kurmu\u015f ve NeXTstep isimli bir bilgisayar \u00fcretmeye \u00e7al\u0131\u015f\u0131yordu. NeXT m\u00fchendisleri NeXTstep\u2019de \u00e7al\u0131\u015facak i\u015fletim sistemini Objective-C ile yazmaya karar verdiler ve olu\u015fturduklar\u0131 k\u00fct\u00fcphanelerde \u00f6n ek olarak bilgisayar\u0131n ismine ithafen \u201cNS\u201d k\u0131saltmas\u0131n\u0131 kulland\u0131lar. Zaman i\u00e7inde bu k\u00fct\u00fcphanelerde\u00a0\u00e7ok b\u00fcy\u00fck de\u011fi\u015fiklikler olsa da \u201cNS\u201d k\u0131saltmas\u0131 sabit kald\u0131.<\/p>\n<p style=\"text-align: justify\">1990\u2019lara gelindi\u011finde Apple pazar pay\u0131n\u0131 kaybetmeye ba\u015flam\u0131\u015ft\u0131; Mac OS beklentileri art\u0131k kar\u015f\u0131layam\u0131yordu. Apple yeni i\u015fletim sistemi\u00a0projeleri ba\u015far\u0131ya ula\u015famay\u0131nca 1996\u2019da NeXT\u2019i sat\u0131n ald\u0131 ve Mac OS X, NeXT\u2019in tecr\u00fcbesi ve k\u00fct\u00fcphaneleri dolay\u0131s\u0131yla Objective-C ile geli\u015ftirilmeye ba\u015fland\u0131. Objective-C OS X&#8217;in temelini olu\u015fturmas\u0131 nedeniyle Apple i\u00e7erisinde kal\u0131c\u0131\u00a0hale geldi.\u00a0Apple 2006 y\u0131l\u0131nda \u00e7e\u015fitli \u00f6zellikler ekledi\u011fi\u00a0Objective-C 2.0\u2019\u0131 yay\u0131nlad\u0131 ve iOS\u2019da da Objective-C\u2019yi ana programlama dili olarak belirledi.<\/p>\n<h3 style=\"text-align: justify\">Swift<\/h3>\n<div style=\"width: 264px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" src=\"https:\/\/blog.koddit.com\/wp-content\/plugins\/wp-images-lazy-loading\/images\/grey.gif\" data-original=\"http:\/\/www.maclife.com\/files\/u334114\/2014\/06\/swift.jpg\" alt=\"\" width=\"254\" height=\"141\" \/><p class=\"wp-caption-text\"><noscript><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/www.maclife.com\/files\/u334114\/2014\/06\/swift.jpg\" alt=\"\" width=\"254\" height=\"141\" \/><\/noscript> Swift WWDC 2014&#8217;de duyuruldu<\/p><\/div>\n<p style=\"text-align: justify\">Swift&#8217;in tarih\u00e7esi do\u011fal olarak epey k\u0131sa; dil\u00a0Apple&#8217;da geli\u015ftirici ara\u00e7lar\u0131 biriminde \u00e7al\u0131\u015fan (ve daha sonra bu birimin ba\u015f\u0131na ge\u00e7en)\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/Chris_Lattner\">Chris Lattner<\/a>&#8216;\u0131n eme\u011finin sonucu. 2010 y\u0131l\u0131nda gizlice Swift&#8217;i geli\u015ftirmeye ba\u015flayan Lattner dilin temel \u00f6zellikleri \u00e7al\u0131\u015f\u0131r hale geldi\u011fi 2011 y\u0131l\u0131nda Apple&#8217;daki \u00fcstlerine s\u0131rr\u0131n\u0131 a\u00e7\u0131kl\u0131yor ve\u00a0ard\u0131ndan k\u0131sa bir s\u00fcre sonra Swift \u00fczerinde \u00e7al\u0131\u015fan ekip b\u00fcy\u00fcyor. \u015eirket i\u00e7inde y\u00fcr\u00fct\u00fclen yakla\u015f\u0131k 2.5 y\u0131ll\u0131k\u00a0gizli\u00a0\u00e7al\u0131\u015fman\u0131n\u00a0ard\u0131ndan da Swift geli\u015ftiricilere\u00a0duyuruluyor.<\/p>\n<h2 style=\"text-align: justify\"><\/h2>\n<h2 style=\"text-align: justify\">S\u00f6zdizimi Farkl\u0131l\u0131klar\u0131<\/h2>\n<p style=\"text-align: justify\">Objective-C \u00e7ok uzun s\u00fcredir farkl\u0131 s\u00f6zdizimi y\u00fcz\u00fcnden ele\u015ftiri oklar\u0131n\u0131n hedefi olmu\u015f durumda. \u00d6zellikle C# veya Java gibi modern dillere al\u0131\u015fm\u0131\u015f programc\u0131lar\u00a0i\u00e7in Smalltalk ve C&#8217;nin birle\u015fiminden do\u011fan s\u00f6z dizimi tam bir kabus. K\u0131sa (ve aslen kullan\u0131\u015fs\u0131z) bir \u00f6rnekle incelersek;<\/p>\n<pre class=\"lang:objc decode:true\" title=\"Objective-C Dizi tan\u0131mlama \">NSArray * dizi = [[NSArray alloc] initWithArray: @[@\"Selam\", @\"Koddit\"] copyItems: NO];<\/pre>\n<p style=\"text-align: justify\">G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere tek bir sat\u0131r i\u00e7erisinde &#8220;*&#8221;, &#8220;[]&#8221; \u00a0ve &#8220;@&#8221; gibi yabanc\u0131\u00a0g\u00f6z\u00fcken ve al\u0131\u015f\u0131k olmayanlar i\u00e7in okumay\u0131 zorla\u015ft\u0131ran pek \u00e7ok karakter var.\u00a0Swift ise Objective-C&#8217;ye nazaran daha &#8220;tan\u0131d\u0131k&#8221;\u00a0bir s\u00f6z dizimine sahip. Benzer bir \u00f6rne\u011fe bakarsak;<\/p>\n<pre class=\"lang:swift decode:true\" title=\"Swift dizi tan\u0131m\u0131\">let dizi = Array&lt;String&gt;(count: 5, repeatedValue: \"Koddit\");<\/pre>\n<p style=\"text-align: justify\">Her ne kadar Swift&#8217;de kod okumak daha kolay\u00a0gibi dursa da i\u015fin as\u0131l pek \u00f6yle de\u011fil. Mesela Apple&#8217;\u0131n resmi Swift <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/Swift\/Conceptual\/Swift_Programming_Language\/OptionalChaining.html\">d\u00f6k\u00fcman\u0131nda<\/a> ge\u00e7en a\u015fa\u011f\u0131daki\u00a0kodu &#8220;optional&#8221; ve &#8220;optional chaning&#8221;\u00a0kavramlar\u0131 konusunda\u00a0fikriniz yoksa do\u011fru bir \u015fekilde anlaman\u0131z epey zor;<\/p>\n<pre class=\"lang:objc decode:true\" title=\"Optional Chaining \">if let johnsStreet = john.residence?.address?.street {\r\n    println(\"John's street name is \\(johnsStreet).\")\r\n} else {\r\n    println(\"Unable to retrieve the address.\")\r\n}<\/pre>\n<p style=\"text-align: justify\">Ayr\u0131ca kavram konusunda fikriniz olsa bile hem Objective-C hem Swift&#8217;de kar\u0131\u015f\u0131k\u00a0gelecek baz\u0131 s\u00f6z dizimleri de mevcut.\u00a0\u00d6rne\u011fin pek \u00e7ok programc\u0131 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Closure_(computer_programming)\">closure<\/a> kavram\u0131na a\u015fina olsa da hem <a href=\"http:\/\/fuckingblocksyntax.com\">Objective-C<\/a> hem de <a href=\"http:\/\/fuckingswiftblocksyntax.com\">Swift<\/a>&#8216;de closure s\u00f6z dizimi epey karma\u015f\u0131k.<\/p>\n<p style=\"text-align: justify\">\u00d6zetle Swift\u00a0ba\u015fta daha &#8220;arkada\u015f canl\u0131s\u0131&#8221; g\u00f6z\u00fckse de di\u011fer dillere g\u00f6re garip ve yabanc\u0131 pek \u00e7ok noktas\u0131 da mevcut.<\/p>\n<h2 style=\"text-align: justify\">Yetenekler<\/h2>\n<p style=\"text-align: justify\">Swift gen\u00e7 bir dil olmas\u0131 sayesinde\u00a0Objective-C&#8217;ye oranla daha yetenekli; geli\u015ftiriciler\u00a0di\u011fer\u00a0dillerde bulunan ve sevilen \u00f6zellikleri bir araya toplam\u0131\u015f.\u00a0Bir fonksiyondan birden \u00e7ok de\u011fer d\u00f6nd\u00fcrme (Tupple), de\u011fi\u015fken tan\u0131mlarken her seferinde tipini yazmaya gerek olmamas\u0131\u00a0(Type Inference), Class-Struct-Enum i\u00e7erisinde ba\u015fka Class-Struct-Enum tan\u0131mlayabilme (Nested Types), +, -, *, \/ gibi standart operat\u00f6rleri kendi tan\u0131mlar\u0131n\u0131n d\u0131\u015f\u0131nda kullanabilme\u00a0(Operator Overloading) ve hatta kendi operat\u00f6r\u00fcn\u00fc tan\u0131mlama gibi Objective-C&#8217;de olmayan pek \u00e7ok \u00f6zellik dile eklenmi\u015f.<\/p>\n<p style=\"text-align: justify\">Yapaca\u011f\u0131n\u0131z i\u015fe ba\u011fl\u0131 olarak Objective-C&#8217;de de pointerlara do\u011frudan eri\u015filebiliyor olmas\u0131 ve <a href=\"http:\/\/en.wikipedia.org\/wiki\/C_preprocessor\">preprocessor komutlar\u0131<\/a> hayat\u0131n\u0131z\u0131 baya kolayla\u015ft\u0131rabilir ama bunlar\u0131 ger\u00e7ekle\u015ftirmenin de Swift&#8217;de \u00e7e\u015fitli yollar\u0131 mevcut.<\/p>\n<h2 style=\"text-align: justify\">Esneklik<\/h2>\n<p style=\"text-align: justify\">Swift kod yazma s\u0131ras\u0131nda Objective-C&#8217;ye g\u00f6re \u00e7ok daha esnek.\u00a0Apple&#8217;\u0131n resmi d\u00f6k\u00fcmantasyonunda neredeyse her konu i\u00e7in &#8220;isterseniz b\u00f6yle de yazabilirsiniz&#8221; \u015feklinde bir \u00f6rnek var. Mesela a\u015fa\u011f\u0131daki 4 sat\u0131r da String&#8217;lerden olu\u015fan bir dizi tan\u0131ml\u0131yor;<\/p>\n<pre class=\"lang:swift decode:true\" title=\"Swift dizi tan\u0131mlar\u0131\">let dizi = [String]();\r\nlet dizi2 = Array&lt;String&gt;()\r\nlet dizi3: [String] = Array&lt;String&gt;();\r\nlet dizi4: Array&lt;String&gt; = [String]()<\/pre>\n<p style=\"text-align: justify\">Elbette Objective-C&#8217;de de diziyi birden \u00e7ok \u015fekilde tan\u0131mlamak m\u00fcmk\u00fcn ama Objective-C&#8217;de\u00a0farkl\u0131l\u0131klar genel olarak\u00a0s\u00f6z diziminden de\u011fil farkl\u0131 metotlar\u0131n \u00e7a\u011fr\u0131lmas\u0131ndan kaynaklan\u0131yor.\u00a0Bu arada \u00f6rnek kodda\u00a0noktal\u0131 virg\u00fcl\u00fcn baz\u0131 sat\u0131rlarda\u00a0olmamas\u0131 da hata de\u011fil, noktal\u0131 virg\u00fcl kullan\u0131m\u0131 JavaScript gibi Swift&#8217;de de iste\u011fe ba\u011fl\u0131.<\/p>\n<p style=\"text-align: justify\">Swift s\u00f6z diziminin esnekli\u011fi konu closure&#8217;lar olunca daha net ortaya \u00e7\u0131k\u0131yor. A\u015fa\u011f\u0131daki 6 \u00f6rnek de Apple&#8217;\u0131n Swift\u00a0<a href=\"https:\/\/developer.apple.com\/library\/prerelease\/ios\/documentation\/Swift\/Conceptual\/Swift_Programming_Language\/Closures.html#\/\/apple_ref\/doc\/uid\/TP40014097-CH11-ID94\">d\u00f6k\u00fcman\u0131nda<\/a>\u00a0bulunuyor ve tahmin edece\u011finiz \u00fczere hepsi ayn\u0131 i\u015fi yap\u0131yor;<\/p>\n<pre class=\"lang:swift decode:true\" title=\"Closure 1\">reversed = sorted(names, { (s1: String, s2: String) -&gt; Bool in\r\n    return s1 &gt; s2\r\n})<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Closure 2\">reversed = sorted(names, { s1, s2 in return s1 &gt; s2 } )<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Closure 3\">reversed = sorted(names, { s1, s2 in s1 &gt; s2 } )<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Closure 4\">reversed = sorted(names, { $0 &gt; $1 } )<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Closure 5\">reversed = sorted(names, &gt;)<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Closure 6\">reversed = sorted(names) { $0 &gt; $1 }<\/pre>\n<p style=\"text-align: justify\">Swift hem Objective-C ile uyumluyken\u00a0hem de Objective-C&#8217;nin desteklemedi\u011fi pek \u00e7ok yeni \u00f6zelli\u011fi destekliyor, dolay\u0131s\u0131yla bu da programc\u0131ya s\u00f6z dizimi d\u0131\u015f\u0131nda da\u00a0bir esneklik sa\u011fl\u0131yor. Buna en g\u00fczel \u00f6rnek olarak <a href=\"http:\/\/en.wikipedia.org\/wiki\/Generic_programming\">generic<\/a> kullan\u0131m\u0131 verilebilir;<\/p>\n<pre class=\"lang:swift decode:true\" title=\"Any ile fonksiyon\">func koddit (de\u011fi\u015fken: Any) -&gt; Bool { \r\n    if de\u011fi\u015fken is String {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}<\/pre>\n<pre class=\"lang:swift decode:true\" title=\"Generic ile fonksiyon\">func kodditGeneric&lt;T&gt;(de\u011fi\u015fken: T) -&gt; Bool {\r\n    if de\u011fi\u015fken is String {\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}<\/pre>\n<p style=\"text-align: justify\">&#8220;Any&#8221; ve &#8220;AnyObject&#8221; Objective-C ile uyumluluk a\u00e7\u0131s\u0131ndan Swift&#8217;e eklenen ve her nesnenin atanabilece\u011fi veri tipleri. Generic ise\u00a0benzer ama\u00e7larla kullan\u0131lan ve k\u0131smen daha esnek olan bir yap\u0131. Ancak bir k\u0131s\u0131tlama olmad\u0131\u011f\u0131 i\u00e7in ikisini bir arada kullanmak m\u00fcmk\u00fcn. (Ek olarak belirteyim, \u00a0de\u011fi\u015fken ad\u0131 olarak &#8220;de\u011fi\u015fken&#8221;&#8216;i kullanmam yanl\u0131\u015f\u00a0de\u011fil, Swift Unicode karakterleri destekledi\u011fi i\u00e7in de\u011fi\u015fken isimlerinde T\u00fcrk\u00e7e veya emoji karakterleri kullan\u0131labiliyor)<\/p>\n<p style=\"text-align: justify\">Her ne kadar esneklik g\u00fczel bir \u015fey gibi g\u00f6r\u00fcnse de e\u011fer ba\u015fkalar\u0131n\u0131n kodlar\u0131yla s\u0131k s\u0131k ha\u015f\u0131r ne\u015fir oluyorsan\u0131z veya kalabal\u0131k bir grupla belirli kodlama standart\u0131 olmadan \u00e7al\u0131\u015f\u0131yorsan\u0131z ba\u015f\u0131n\u0131z\u0131 \u00e7ok b\u00fcy\u00fck ihtimalle a\u011fr\u0131tacakt\u0131r.<\/p>\n<h2 style=\"text-align: justify\">Hata \u00d6nleme ve Ay\u0131klama<\/h2>\n<div style=\"width: 360px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" src=\"https:\/\/blog.koddit.com\/wp-content\/plugins\/wp-images-lazy-loading\/images\/grey.gif\" data-original=\"http:\/\/www.lexolutionit.com\/published-content\/userfiles\/Web%20Programming%20Mistakes(1).jpg\" alt=\"\" width=\"350\" height=\"175\" \/><p class=\"wp-caption-text\"><noscript><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/www.lexolutionit.com\/published-content\/userfiles\/Web%20Programming%20Mistakes(1).jpg\" alt=\"\" width=\"350\" height=\"175\" \/><\/noscript> K\u00fc\u00e7\u00fck hatalar bazen b\u00fcy\u00fck s\u0131k\u0131nt\u0131lar yaratabiliyor.<\/p><\/div>\n<p style=\"text-align: justify\">Derleyici ve IDE&#8217;ler her ne kadar zeki olsalar da\u00a0bazen programc\u0131lar\u0131n yapt\u0131\u011f\u0131\u00a0k\u00fc\u00e7\u00fck hatalar\u0131 farkedemeyebiliyorlar. Genelde bunlar \u00e7ok b\u00fcy\u00fck bir soruna neden olmasalar\u00a0da Apple&#8217;\u0131n <a href=\"https:\/\/www.imperialviolet.org\/2014\/02\/22\/applebug.html\">goto fail;<\/a> rezaletinde oldu\u011fu gibi\u00a0ciddi\u00a0sonu\u00e7lar\u0131 da olabiliyor. Swift geli\u015ftirilirken de bu hatalar\u0131 azaltmak ad\u0131na pek \u00e7ok \u00f6nlem al\u0131nm\u0131\u015f;<\/p>\n<ul style=\"text-align: justify\">\n<li>If-Else bloklar\u0131\u00a0s\u00fcsl\u00fc\u00a0parantez ile kullan\u0131lmak zorunda.<\/li>\n<li>Switch-Case bloklar\u0131nda t\u00fcm durumlar tan\u0131mlanmal\u0131.<\/li>\n<li>Switch-Case bloklar\u0131nda her durum i\u00e7in ayr\u0131 ayr\u0131 &#8220;break&#8221; yazmaya gerek yok, bunun yerine e\u011fer kodun sonraki duruma devam etmesi isteniyorsa \u00f6zellikle belirtiliyor.<\/li>\n<li>E\u011fer\u00a0mant\u0131ksal bir kontrol her zaman\u00a0do\u011fru veya yanl\u0131\u015fsa derleyici\u00a0hata\u00a0veriyor.<\/li>\n<li>De\u011fi\u015fkene atama yapmadan veya tip uyumsuzlu\u011funda de\u011fi\u015fkeni kullanmak m\u00fcmk\u00fcn de\u011fil.<\/li>\n<li>E\u011fer i\u015flem s\u0131ras\u0131nda say\u0131larda ta\u015fma olursa program hi\u00e7 bir \u015fey olmam\u0131\u015f gibi devam etmek yerine sonlan\u0131yor.<\/li>\n<li>De\u011fi\u015fkenin\u00a0&#8220;NULL&#8221; (Swift ve Objective-C&#8217;deki kar\u015f\u0131l\u0131\u011f\u0131\u00a0&#8220;nil&#8221;) olup olamayaca\u011f\u0131 d\u00fc\u015f\u00fcn\u00fclerek de\u011fi\u015fkenler farkl\u0131 tan\u0131mlan\u0131yor.<\/li>\n<\/ul>\n<p style=\"text-align: justify\">Bunlar ka\u011f\u0131t \u00fczerinde \u00e7ok g\u00fczel g\u00f6z\u00fckse de ne yaz\u0131k ki \u00f6zellikle tip uyumsuzlu\u011fu durumunda derleyicinin verdi\u011fi hatalar \u00e7o\u011fu zaman bir \u015fey ifade etmiyor. K\u00fc\u00e7\u00fck bir \u015fey yazarken bile\u00a0<em>&#8221; Cannot convert expression&#8217;s type &#8216;($T1, $T2, $T3) -&gt; $T0&#8217; to type &#8216;()&#8217; &#8221; \u00a0<\/em>gibi manas\u0131z hatalar\u0131n kar\u015f\u0131n\u0131za \u00e7\u0131kmas\u0131\u00a0olas\u0131.<\/p>\n<p style=\"text-align: justify\">Di\u011fer bir s\u0131k\u0131nt\u0131 da Xcode ve Swift&#8217;in halen tam olarak anla\u015fam\u0131yor olmas\u0131. Xcode Swift&#8217;i yeniden d\u00fczenleyemedi\u011fi gibi (de\u011fi\u015fken ad\u0131n\u0131 kolayca\u00a0de\u011fi\u015ftirmek vs) hata ay\u0131klarken de pek yard\u0131mc\u0131 olmuyor. Objective-C&#8217;nin aksine basit bir de\u011fi\u015fken de\u011ferini g\u00f6rmek i\u00e7in bile\u00a0<a href=\"http:\/\/lldb.llvm.org\/tutorial.html\">lldb komutlar\u0131n\u0131<\/a> kullanmak veya fazladan kod yazmak a\u00e7\u0131kcas\u0131 epey sinir bozucu.<\/p>\n<h2 style=\"text-align: justify\">Performans<\/h2>\n<div style=\"width: 275px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" src=\"https:\/\/blog.koddit.com\/wp-content\/plugins\/wp-images-lazy-loading\/images\/grey.gif\" data-original=\"http:\/\/i.stack.imgur.com\/wcdXk.jpg\" alt=\"\" width=\"265\" height=\"175\" \/><p class=\"wp-caption-text\"><noscript><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/i.stack.imgur.com\/wcdXk.jpg\" alt=\"\" width=\"265\" height=\"175\" \/><\/noscript> Apple&#8217;a g\u00f6re Swift&#8217;in h\u0131z kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/p><\/div>\n<p style=\"text-align: justify\">Apple Swift&#8217;in Objective-C&#8217;ye g\u00f6re \u00e7ok daha h\u0131zl\u0131 oldu\u011funu iddia ediyor. Hen\u00fcz bunu kesin\u00a0olarak do\u011frulayan bir bulgu olmamakla birlikte Swift 1. s\u00fcr\u00fcm\u00fcyle birlikte basit testlerde yakla\u015f\u0131k ayn\u0131 h\u0131zlarda sonu\u00e7lar\u00a0<a href=\"http:\/\/stackoverflow.com\/questions\/24101718\/swift-performance-sorting-arrays\">veriyor<\/a>, zaten\u00a0teorik olarak da Objective-C&#8217;nin \u00e7al\u0131\u015fma \u015fekli nedeniyle Swift&#8217;in biraz daha h\u0131zl\u0131 olmas\u0131 normal. Benim \u00e7e\u015fitli <a href=\"https:\/\/projecteuler.net\">project euler<\/a>\u00a0sorular\u0131nda yapt\u0131\u011f\u0131m denemelerde Swift genelde daha yava\u015f kalsa da\u00a0yapt\u0131\u011f\u0131m\u0131n \u00e7ok ciddi bir test olmad\u0131\u011f\u0131n\u0131 da belirtmem gerekiyor.<\/p>\n<p style=\"text-align: justify\">Bu arada e\u011fer\u00a0uygulaman\u0131zda Apple k\u00fct\u00fcphanelerini s\u0131k\u00e7a kullan\u0131yorsan\u0131z Swift veya Objective-C kullanman\u0131z performans a\u00e7\u0131s\u0131ndan pek bir fark yaratmayabilir, Apple Swift i\u00e7in baz\u0131 d\u00fczenlemeler yapsa da k\u00fct\u00fcphanelerinde genel olarak C, C++ ve Objective-C kullan\u0131yor.<\/p>\n<h2 style=\"text-align: justify\">Hangisini \u00d6\u011frenmeli<\/h2>\n<p style=\"text-align: justify\">Hangi dili \u00f6\u011frenece\u011finiz tamamen sizin planlar\u0131n\u0131zla ile alakal\u0131.\u00a0Objective-C s\u00f6z dizimi biraz korkutucu g\u00f6z\u00fckse de Swift&#8217;in \u00f6zelliklerini ve p\u00fcf noktalar\u0131n\u0131 \u00f6\u011frenmek \u00e7ok daha zor. Di\u011fer yandan zaten iOS&#8217;a veya OS X&#8217;e nas\u0131l uygulama geli\u015ftirece\u011finizi \u00f6\u011frenirken vaktinizin b\u00fcy\u00fck k\u0131sm\u0131n\u0131 Apple k\u00fct\u00fcphanelerini \u00f6\u011frenerek harcayacaks\u0131n\u0131z.<\/p>\n<p style=\"text-align: justify\"><strong>BENCE<\/strong>\u00a0e\u011fer kendi uygulaman\u0131z\u0131 yazmak istiyorsan\u0131z ve yeterli vaktiniz varsa Swift \u00f6\u011frenin. Vaktiniz k\u0131s\u0131tl\u0131ysa veya bir firmaya girmek ve\u00a0iOS \/ OS X \u00fczerine \u00e7al\u0131\u015fmak istiyorsan\u0131z Objective-C \u00f6\u011frenmeniz daha mant\u0131kl\u0131 olacakt\u0131r.<\/p>\n<h2 style=\"text-align: justify\">Sonu\u00e7<\/h2>\n<p style=\"text-align: justify\">Swift de Objective-C de m\u00fckemmel de\u011fil. Swift 2010&#8217;da geli\u015ftirilmeye ba\u015flamas\u0131n\u0131n etkisiyle daha modern \u00e7\u00f6z\u00fcmler sunmakla birlikte Objective-C de hem iOS ve OS X&#8217;in merkezinde olmas\u0131 hem de geli\u015ftiriciler taraf\u0131ndan yayg\u0131n kullan\u0131m\u0131 nedeniyle uzun bir s\u00fcre daha sekt\u00f6rde \u00f6nemli bir yere sahip olacak.<\/p>","protected":false},"excerpt":{"rendered":"<p>Swift ile birlikte \u00f6zellikle iOS uygulama geli\u015ftirmeye yeni ba\u015flamay\u0131 d\u00fc\u015f\u00fcnen\u00a0pek \u00e7ok ki\u015finin kafas\u0131 kar\u0131\u015ft\u0131. iOS uygulama geli\u015ftiricileri de Swift \u00f6\u011frenip \u00f6\u011frenmemek konusunda karars\u0131z. Bu yaz\u0131da biraz fikir verebilmek ad\u0131na Objective-C ve Swift&#8217;i \u00e7e\u015fitli a\u00e7\u0131lardan kar\u015f\u0131la\u015ft\u0131rd\u0131m. Tarih\u00e7e Objective-C Her k\u00f6\u015feden ba\u015fka bir nesneye y\u00f6nelimli programlama (NYP) dilinin f\u0131rlad\u0131\u011f\u0131 g\u00fcn\u00fcm\u00fcz\u00fcn aksine\u00a01970\u2019lerin sonu, 1980\u2019lerin ba\u015f\u0131nda en yayg\u0131n ve [&hellip;]<\/p>","protected":false},"author":4,"featured_media":1960,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[195,168],"tags":[198,196,197],"class_list":["post-1936","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios","category-yazilim","tag-ios","tag-objective-c","tag-swift"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit<\/title>\n<meta name=\"description\" content=\"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C&#039;nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.koddit.com\/en\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit\" \/>\n<meta property=\"og:description\" content=\"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C&#039;nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.koddit.com\/en\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\" \/>\n<meta property=\"og:site_name\" content=\"Koddit\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-29T17:40:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-04-27T19:44:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.koddit.com\/wp-content\/uploads\/2014\/12\/swift-logo-hero.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Y\u00fccel Uzun\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@u_jell\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Y\u00fccel Uzun\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\"},\"author\":{\"name\":\"Y\u00fccel Uzun\",\"@id\":\"https:\/\/blog.koddit.com\/#\/schema\/person\/ef65ce1ffefe301b30c55da29f7c6860\"},\"headline\":\"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C\",\"datePublished\":\"2014-12-29T17:40:34+00:00\",\"dateModified\":\"2015-04-27T19:44:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\"},\"wordCount\":1797,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/blog.koddit.com\/#organization\"},\"keywords\":[\"ios\",\"objective-c\",\"swift\"],\"articleSection\":[\"iOS\",\"Yaz\u0131l\u0131m\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\",\"url\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\",\"name\":\"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit\",\"isPartOf\":{\"@id\":\"https:\/\/blog.koddit.com\/#website\"},\"datePublished\":\"2014-12-29T17:40:34+00:00\",\"dateModified\":\"2015-04-27T19:44:26+00:00\",\"description\":\"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C'nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/blog.koddit.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.koddit.com\/#website\",\"url\":\"https:\/\/blog.koddit.com\/\",\"name\":\"Koddit\",\"description\":\"Blog\",\"publisher\":{\"@id\":\"https:\/\/blog.koddit.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.koddit.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.koddit.com\/#organization\",\"name\":\"Koddit\",\"url\":\"https:\/\/blog.koddit.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.koddit.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.koddit.com\/wp-content\/uploads\/2023\/04\/koddit-logo.png\",\"contentUrl\":\"https:\/\/blog.koddit.com\/wp-content\/uploads\/2023\/04\/koddit-logo.png\",\"width\":\"176\",\"height\":\"65\",\"caption\":\"Koddit\"},\"image\":{\"@id\":\"https:\/\/blog.koddit.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.koddit.com\/#\/schema\/person\/ef65ce1ffefe301b30c55da29f7c6860\",\"name\":\"Y\u00fccel Uzun\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.koddit.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7fd21d052c1665408ec0cd9b6f20173e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7fd21d052c1665408ec0cd9b6f20173e?s=96&d=mm&r=g\",\"caption\":\"Y\u00fccel Uzun\"},\"description\":\"Y\u00fcksek lisanstan vakit bulabildi\u011finde iOS uygulama geli\u015ftirmekle ilgili bildiklerini yazmaya \u00e7al\u0131\u015f\u0131yor.\",\"sameAs\":[\"https:\/\/de.linkedin.com\/in\/yuceluzun\",\"https:\/\/twitter.com\/u_jell\"],\"url\":\"https:\/\/blog.koddit.com\/en\/author\/yucel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit","description":"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C'nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.koddit.com\/en\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/","og_locale":"en_US","og_type":"article","og_title":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit","og_description":"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C'nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.","og_url":"https:\/\/blog.koddit.com\/en\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/","og_site_name":"Koddit","article_published_time":"2014-12-29T17:40:34+00:00","article_modified_time":"2015-04-27T19:44:26+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blog.koddit.com\/wp-content\/uploads\/2014\/12\/swift-logo-hero.jpg","type":"image\/jpeg"}],"author":"Y\u00fccel Uzun","twitter_card":"summary_large_image","twitter_creator":"@u_jell","twitter_misc":{"Written by":"Y\u00fccel Uzun","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#article","isPartOf":{"@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/"},"author":{"name":"Y\u00fccel Uzun","@id":"https:\/\/blog.koddit.com\/#\/schema\/person\/ef65ce1ffefe301b30c55da29f7c6860"},"headline":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C","datePublished":"2014-12-29T17:40:34+00:00","dateModified":"2015-04-27T19:44:26+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/"},"wordCount":1797,"commentCount":2,"publisher":{"@id":"https:\/\/blog.koddit.com\/#organization"},"keywords":["ios","objective-c","swift"],"articleSection":["iOS","Yaz\u0131l\u0131m"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/","url":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/","name":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C - Koddit","isPartOf":{"@id":"https:\/\/blog.koddit.com\/#website"},"datePublished":"2014-12-29T17:40:34+00:00","dateModified":"2015-04-27T19:44:26+00:00","description":"iOS uygulama Geli\u015ftirme i\u00e7in kullan\u0131lan Swift ve Objective-C'nin kar\u015f\u0131la\u015ft\u0131rmas\u0131, benzerlikleri, farklar\u0131.","breadcrumb":{"@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.koddit.com\/yazilim\/ios-uygulama-gelistirme-3-swift-vs-objective-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/blog.koddit.com\/"},{"@type":"ListItem","position":2,"name":"iOS Uygulama Geli\u015ftirme 3: Swift vs Objective-C"}]},{"@type":"WebSite","@id":"https:\/\/blog.koddit.com\/#website","url":"https:\/\/blog.koddit.com\/","name":"Koddit","description":"Blog","publisher":{"@id":"https:\/\/blog.koddit.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.koddit.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.koddit.com\/#organization","name":"Koddit","url":"https:\/\/blog.koddit.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.koddit.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.koddit.com\/wp-content\/uploads\/2023\/04\/koddit-logo.png","contentUrl":"https:\/\/blog.koddit.com\/wp-content\/uploads\/2023\/04\/koddit-logo.png","width":"176","height":"65","caption":"Koddit"},"image":{"@id":"https:\/\/blog.koddit.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blog.koddit.com\/#\/schema\/person\/ef65ce1ffefe301b30c55da29f7c6860","name":"Y\u00fccel Uzun","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.koddit.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7fd21d052c1665408ec0cd9b6f20173e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7fd21d052c1665408ec0cd9b6f20173e?s=96&d=mm&r=g","caption":"Y\u00fccel Uzun"},"description":"Y\u00fcksek lisanstan vakit bulabildi\u011finde iOS uygulama geli\u015ftirmekle ilgili bildiklerini yazmaya \u00e7al\u0131\u015f\u0131yor.","sameAs":["https:\/\/de.linkedin.com\/in\/yuceluzun","https:\/\/twitter.com\/u_jell"],"url":"https:\/\/blog.koddit.com\/en\/author\/yucel\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/posts\/1936"}],"collection":[{"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/comments?post=1936"}],"version-history":[{"count":0,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/posts\/1936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/media\/1960"}],"wp:attachment":[{"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/media?parent=1936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/categories?post=1936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.koddit.com\/en\/wp-json\/wp\/v2\/tags?post=1936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}