Nativní typy pro iOS a macOS

Rozhraní API pro Mac a iOS používají datové typy specifické pro architekturu, které jsou vždy 32bitové na 32bitových platformách a 64bitové na 64bitových platformách.

Například namapuje Objective-C datový NSInteger typ na v int32_t 32bitových systémech int64_t a na 64bitové systémy.

Aby se toto chování shodoval s naším jednotným rozhraním API, int nahrazujeme předchozí použití objektu (které v .NET System.Int32je definováno jako vždy ) na nový datový typ: System.nint. "n" si můžete myslet jako "nativní", takže nativní celočíselný typ platformy.

U těchto nových datových typů se stejný zdrojový kód zkompiluje pro 32bitovou a 64bitovou architekturu v závislosti na vašich příznakech kompilace.

Nové datové typy

Následující tabulka uvádí změny v našich datových typech tak, aby odpovídaly tomuto novému 32/64bitovému světu:

Nativní typ 32bitový typ zálohování 64bitový typ zálohování
System.nint System.Int32 (int) System.Int64 (long)
System.nuint System.UInt32 (uint) System.UInt64 (ulong)
System.nfloat System.Single (float) System.Double (double)

Tyto názvy jsme zvolili tak, aby váš kód jazyka C# vypadal víceméně stejně, jako by vypadal dnes.

Implicitní a explicitní převody

Účelem návrhu nových datových typů je umožnit jednomu zdrojovému souboru C# přirozené využití 32bitového nebo 64bitového úložiště v závislosti na hostitelské platformě a nastavení kompilace.

To nás vyžadovalo k návrhu sady implicitních a explicitních převodů do a z datových typů specifických pro platformu na integrální datové typy .NET a datové typy s plovoucí desetinnou čárkou.

Implicitní operátory převodů jsou k dispozici v případě, že neexistuje možnost ztráty dat (32bitové hodnoty uložené na 64bitovém prostoru).

Explicitní operátory převodů jsou k dispozici v případě, že dojde ke ztrátě dat (64bitová hodnota se ukládá v umístění úložiště 32 nebo potenciálně 32).

intA uint jsou implicitně float převoditelné na ninta , nuintnfloat protože 32 bitů se vždy vejde do 32 nebo 64 bitů.

nintA nuint jsou implicitně nfloat převoditelné na longa , ulongdouble protože 32 nebo 64bitové hodnoty se vždy vejdou do 64bitového úložiště.

Je nutné použít explicitní převody nintz , nuintnfloat a do inta , floatuint protože nativní typy mohou obsahovat 64 bitů úložiště.

Je nutné použít explicitní převody longz , ulongdouble a do ninta , nfloatnuint protože nativní typy mohou obsahovat pouze 32 bitů úložiště.

Typy coregraphics

Datové typy bodů, velikostí a obdélníků, které se používají s coregraphics, používají 32 nebo 64 bitů v závislosti na zařízení, na které běží. Při původní vázání rozhraní API pro iOS a Mac jsme použili existující datové struktury, které odpovídaly velikostem hostitelské platformy (datové typy v System.Drawing).

Při přechodu na Unified budete muset nahradit instance CoreGraphics jejich protějšky, jak je znázorněno v následující tabulce:

Starý typ v System.Drawing Nová základní infografika datového typu Description
RectangleF CGRect Obsahuje informace o obdélníku s plovoucí desetinnou čárkou.
SizeF CGSize Obsahuje informace o velikosti s plovoucí desetinnou čárkou (šířka, výška)
PointF CGPoint Obsahuje informace o bodech s plovoucí desetinnou čárkou (X, Y)

Staré datové typy, které používaly float, ukládají prvky datových struktur, zatímco nový používá System.nfloat.