Úvod do C# pro Objective-C vývojáře
Xamarin. iOS umožňuje sdílet nezávislá kód platformy napsaný v jazyce C# na různých platformách. Stávající aplikace iOS však mohou chtít využít Objective-C kód, který již byl vytvořen. Tento článek slouží jako krátký úvod pro vývojáře, Objective-C kteří se chtějí přesunout do aplikace Xamarin a jazyka C#.
aplikace pro iOS a macOS vyvinuté v Objective-C systému můžou využít výhod Xamarin pomocí jazyka C# v místech, kde není vyžadován kód specifický pro platformu, což umožňuje použití takového kódu na zařízeních, která nejsou Apple. Věci, jako jsou webové služby, analýza JSON a XML a vlastní algoritmy, se pak dají použít pro různé platformy.
Aby bylo možné využít Xamarin a přitom zachovat stávající Objective-C assety, může být bývalé zpřístupněno v jazyce C# v technologii ze Xamarin označované jako vazby, což je kód Surface Objective-C na spravovaném světovém světě C#. V případě potřeby je také možné kód přenést do C# i po řádcích. Bez ohledu na to, jestli jde o vazbu nebo přenos, je nutné, aby některé znalosti i Objective-C C# byly nezbytné pro efektivní využití stávajícího Objective-C kódu pomocí Xamarin. iOS.
Objective-C Komunikace
V současnosti není k dispozici žádný podporovaný mechanismus pro vytvoření knihovny v jazyce C# pomocí Xamarin. iOS, který lze volat z Objective-C . Hlavním důvodem pro toto je, že Mono runtime také vyžaduje kromě vazby. Můžete ale stále vytvořit většinu logiky v nástroji Objective-C , včetně uživatelských rozhraní. Chcete-li to provést, zabalte Objective-C kód do knihovny a vytvořte pro něj vazbu. Xamarin. iOS je potřeba ke spuštění aplikace (to znamená, že musí vytvořit Main vstupní bod). Poté může být jakákoli jiná logika v Objective-C , zpřístupněna v jazyce C# prostřednictvím vazby (nebo prostřednictvím volání nespravovaného kódu). Tímto způsobem můžete zachovat logiku specifickou pro platformu v Objective-C a vyvíjet části nezávislá platformy v jazyce C#.
V tomto článku se vysvětlují některé klíčové podobnosti a na rozdíl od několika rozdílů v obou jazycích slouží jako úvod při přechodu na C# pomocí Xamarin. iOS, ať už se jedná o vazbu na existující Objective-C kód nebo jeho přenos do c#.
Podrobnosti o vytváření vazeb najdete v tématu další dokumenty v Binding Objective-C .
Porovnání jazyků
Objective-C a C# jsou velmi různými jazyky syntakticky i z hlediska běhového prostředí. Objective-C je dynamický jazyk a používá schéma předávání zpráv, zatímco C# je staticky typovaného typu. Syntaxe Objective-C je podobně jako Smalltalk, zatímco C# představuje většinu základní syntaxe z Java, i když se v posledních letech v době, kdy se v posledních letech vyvolalo mnoho funkcí, je mimo Java.
To říká několik funkcí jazyka pro i Objective-C C#, které jsou podobné funkci. Při vytváření vazby na Objective-C kód z c# nebo při přenosu Objective-C do C# je užitečné pochopit tyto podobnoste.
Protokoly vs. rozhraní
I Objective-C C# jsou jednoduché jazyky dědičnosti. Oba jazyky však podporují implementaci více rozhraní v dané třídě. V Objective-C těchto logických rozhraních se nazývají Objective-C , zatímco v jazyce C# se nazývají rozhraní. Implementace – podstatný rozdíl mezi rozhraním jazyka C# a Objective-C protokolem je ten, který může mít volitelné metody. Další informace najdete v článku události, delegáti a protokoly .
Kategorie vs. metody rozšíření
Objective-C umožňuje přidat metody do třídy, pro kterou nemůžete mít implementační kód pomocí Objective-C. V jazyce C# je podobný koncept dostupný prostřednictvím těch, které jsou známé jako metody rozšíření.
Metody rozšíření umožňují přidat statické metody do třídy, kde statické metody v jazyce C# jsou analogické k metodám třídy v Objective-C . Například následující kód přidá metodu nazvanou ScrollToBottom do UITextView třídy, která zase je spravovaná třída, která je svázána s Objective-CUITextView třídou z UIKit:
public static class UITextViewExtensions
{
public static void ScrollToBottom (this UITextView textView)
{
// code to scroll textView
}
}
Poté, když je vytvořena instance a UITextView v kódu, bude metoda k dispozici v seznamu automatického dokončování, jak je znázorněno níže:

Při volání metody rozšíření je instance předána argumentu, například textView v tomto příkladu.
Rozhraní vs. sestavení
Objective-C třídy související s balíčky ve speciálních adresářích označovaných jako architektury. V jazyce C# a .NET ale sestavení slouží k poskytování opakovaně použitelných bitů předkompilovaného kódu. V prostředích mimo iOS sestavení obsahují kód jazyka IL (Intermediate Language), který je v čase kompilován za běhu. Společnost Apple ale neumožňuje provádění zkompilovaného kódu JIT v aplikacích pro iOS vydaných v App Storu. Proto kód C# cílící na iOS pomocí Xamarin je předem kompilovaný (AOT), který vytváří jeden spustitelný soubor UNIX společně se soubory metadat, které jsou součástí sady prostředků aplikace.
Selektory vs. pojmenované parametry
Objective-C metody, které jsou v podstatě, zahrnují názvy parametrů v selektorech podle jejich velmi povahy. Například selektor, jako je, AddCrayon:WithColor: je jasné, co každý parametr znamená při použití v kódu. Jazyk C# volitelně podporuje také pojmenované argumenty.
Například podobný kód v jazyce C# pomocí pojmenovaných argumentů by byl:
AddCrayon (crayon: myCrayon, color: UIColor.Blue);
I když jazyk C# tuto podporu přidal ve verzi 4,0 jazyka, v praxi se v praxi nepoužívá často. Pokud ale chcete být ve svém kódu explicitní, podpora pro ni je tam.
Hlavičky a obory názvů
Je nadmnožinou jazyka C, Objective-C používá hlavičky pro veřejné deklarace, které jsou odděleny od implementačního souboru. Jazyk C# nepoužívá hlavičkové soubory. Na rozdíl od Objective-C , kód jazyka C# je obsažen v oborech názvů. Pokud chcete zahrnout kód, který je k dispozici v některém oboru názvů, přidejte buď direktivu using, do horní části implementačního souboru, nebo můžete kvalifikovat typ s úplným oborem názvů.
Například následující kód obsahuje UIKit obor názvů, který vytváří každou třídu v tomto oboru názvů pro implementaci:
using UIKit;
namespace MyAppNamespace
{
// implementation of classes
}
Klíčové slovo Namespace ve výše uvedeném kódu navíc nastaví obor názvů, který se používá pro samotný implementační soubor. Pokud více implementačních souborů sdílí stejný obor názvů, není nutné zahrnout obor názvů do direktivy using i v případě, že je odvozený.
Vlastnosti
Jak i Objective-C C# mají koncept vlastností, který poskytuje abstrakce na vysoké úrovni kolem metod přistupujícího objektu. V Objective-C direktivě @property kompilátoru se používá k efektivnímu vygenerování přístupových metod. Naproti tomu C# zahrnuje podporu vlastností v rámci samotného jazyka. Vlastnost jazyka C# lze implementovat buď pomocí delšího stylu, který přistupuje k poli pro zálohování, nebo pomocí kratší syntaxe automatické vlastnosti, jak je znázorněno v následujících příkladech:
// automatic property syntax
public string Name { get; set; }
// property implemented with a backing field
string address;
public string Address {
get {
// could add additional code here
return address;
}
set {
address = value;
}
}
Static – klíčové slovo
Klíčové slovo static má velmi odlišný význam mezi a C#. Ve Objective-C statických funkcích slouží k omezení rozsahu funkce na aktuální soubor. V jazyce C# se ale rozsah udržuje prostřednictvím klíčových slov Public, Private a internal .
Pokud je klíčové slovo static použito pro proměnnou v Objective-C , proměnná udržuje svou hodnotu napříč voláními funkce.
Jazyk C# má také klíčové slovo static. Při použití na metodu to efektivně provede stejnou věc, + v níž modifikátor provádí Objective-C . Konkrétně vytvoří metodu třídy. Podobně při použití na jiné konstrukce, jako jsou například pole, vlastnosti a události, je tato část typu, kterou jsou deklarována, spíše než pomocí jakékoli instance daného typu. Můžete také vytvořit statickou třídu, ve které musí být všechny metody definované ve třídě statické i.
NSArray vs. Inicializace seznamu
Objective-C nyní zahrnuje syntaxi literálů pro použití s NSArray , což usnadňuje inicializaci. Jazyk C# má však bohatší typ nazvaný a List , který je List, což znamená, že typ seznamu je možné poskytnout pomocí kódu, který vytvoří seznam (například šablony v jazyce C++). Kromě toho seznamy podporují automatickou inicializaci, jak je znázorněno níže:
MyClass object1 = new MyClass ();
MyClass object2 = new MyClass ();
List<MyClass> myList = new List<MyClass>{ object1, object2 };
Bloky vs. lambda výrazy
Objective-C používá Objective-C k vytvoření uzávěrů, kde můžete vytvořit funkci, která může používat stav, kde je uzavřen. Jazyk C# má podobný koncept prostřednictvím použití výrazů lambda. Ve výrazech lambda v jazyce C# jsou vytvořeny pomocí => operátoru, jak je znázorněno níže:
(args) => {
// implementation code
};
Další informace o výrazech lambda naleznete v tématu Průvodce programováním v C#společnosti Microsoft.
Souhrn
V tomto článku se liší řada funkcí jazyka mezi jazykem Objective-C a jazykem C#. V některých případech se vyvolal podobným funkcím, které existují mezi jazyky, jako jsou bloky pro lambda výrazy a kategorie pro metody rozšíření. Kromě toho se naopak liší místa, kde se jazyky odchylují, například s obory názvů v jazyce C# a významem klíčového slova static.