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 64 bitů na 64bitových platformách.

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

Abychom toto chování odpovídali, nahradíme v našem sjednoceném rozhraní API předchozí použití int (které je v .NET definováno jako vždy System.Int32) na nový datový typ: System.nint. "n" si můžete představit jako "nativní", takže nativní celočíselnou 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 příznakech kompilace.

Nové datové typy

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

Nativní typ 32bitový typ backingu 64bitový typ backingu
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 vybrali, aby kód jazyka C# vypadal více nebo méně stejným způsobem, jako by vypadal dnes.

Implicitní a explicitní převody

Návrh nových datových typů je určený k tomu, aby jeden zdrojový soubor jazyka C# přirozeně používal 32bitové nebo 64bitové úložiště v závislosti na hostitelské platformě a nastavení kompilace.

To nás vyžadovalo, abychom navrhli sadu implicitních a explicitních převodů na datové typy specifické pro platformu na integrální a plovoucí desetiny .NET.

Operátory implicitních převodů jsou poskytovány, pokud neexistuje možnost ztráty dat (32bitové hodnoty jsou uloženy na 64bitovém prostoru).

Operátory explicitních převodů jsou poskytovány, pokud existuje potenciál ztráty dat (64bitová hodnota se ukládá na 32 nebo potenciálně 32 umístění úložiště).

inta uintfloat všechny jsou implicitně konvertibilní na nintnuint a nfloat jako 32 bitů se vždy vejdou do 32 nebo 64 bitů.

ninta nuintnfloat všechny jsou implicitně konvertibilní na longa ulongdouble jako 32 nebo 64bitové hodnoty se vždy vejdou do 64bitového úložiště.

Je nutné použít explicitní převody z ninta nfloatnuint do inta float vzhledem k tomu, uint že nativní typy mohou obsahovat 64 bitů úložiště.

Je nutné použít explicitní převody z longa doubleulong do ninta nuintnfloat protože nativní typy mohou být schopné uchovávat pouze 32 bitů úložiště.

Typy CoreGraphics

V závislosti na zařízení, na kterém běží, používají datové typy typu Point, size and rectangle data types that are used with CoreGraphics use 32 or 64 bits. Když jsme původně vázali rozhraní API pro iOS a Mac, použili jsme 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 jejich CoreGraphics protějškySystem.Drawing, jak je znázorněno v následující tabulce:

Starý typ v System.Drawing Nové datové typy CoreGraphics Popis
RectangleF CGRect Obsahuje informace o obdélníku s plovoucí desetinou čárkou.
SizeF CGSize Obsahuje informace o velikosti s plovoucí desetinnou čárkou (šířka, výška)
PointF CGPoint Obsahuje informace o plovoucí desetině a bodech (X, Y).

Staré datové typy používaly plovoucí hodnoty k ukládání prvků datových struktur, zatímco nový datový typ používá System.nfloat.