2014-06-06 13 views
54

Jeśli potrzebuję niestandardowego typu w Swift, że mogę typedef, jak to zrobić? (Coś jak typedef składni zamknięcie)Jak zadeklarować typedef w Swift

+5

firmy Apple będący Jabłko (~) ~ różni ich typedef nazywa 'typealias'. Czy znasz już język programowania Swift firmy Apple *? – Kreiri

+0

Dokument ten można znaleźć również tutaj: https://developer.apple.com/library/prerelease/ios/navigation/ (zamiast zawierać bezpośredni link, który może przerwać wyszukiwanie "Swift Programming Language" na stronie) – petert

+2

"Typalias" Kireiriego Swifta nie nazywa się "typedef", ponieważ jego zdolność jest znacznie mniejsza niż w przypadku "typedef", a znacznie bardziej koncentruje się na przypadkach potrzebnych w nowoczesnym programowaniu. Jest to zgodne z ogólną zasadą projektu Swift, polegającą na tym, że większy leksykon koncentruje się na specyficznych potrzebach, w przeciwieństwie do małego leksykonu C, który ma być łączony w ... _przekoncze_ ... sposoby. Gdyby Apple zdecydowało się nazywać to "typedef", ludzie oczekiwaliby, że będzie działał jak "typedef" C. Jest to kwestia projektowania, z którą często korzysta Microsoft - będą używać nazw ustalonych, ale ich implementacja będzie działać inaczej. –

Odpowiedz

96

Słowo kluczowe typealias jest używany w miejscu o typedef

typealias CustomType = String 
var customString:CustomType = "Test String" 
+0

jak mogę zrobić nowy typ tego zamknięcia pozwolić completionBlock: (NSString, NSError!) -> Void = {strg, błąd w myString = "Haider" println ("Mój tekst: \ (myString)") } –

+0

typealias newClosure = ((strg1: NSString, num1: NSNumber) -> Void)? –

+0

@WaqasHaiderSheikh Możesz zrobić, jak 'typalias closureType = (NSString, NSError!) -> Void'. I użyj go jako 'let completionBlock: closureType = {strg, error // coś zrobię}' –

10

dodany do odpowiedzi powyżej:

„typealias” to słowo kluczowe używane jest szybki, który robi podobna funkcja jak typedef.

/*defines a block that has 
    no input param and with 
    void return and the type is given 
    the name voidInputVoidReturnBlock*/   
    typealias voidInputVoidReturnBlock =() -> Void 

    var blockVariable :voidInputVoidReturnBlock = { 

     println(" this is a block that has no input param and with void return") 

    } 

Aby utworzyć typedef z wejściem param składnia jest taka, jak pokazano poniżej:

/*defines a block that has 
    input params NSString, NSError! 
    and with void return and the type 
    is given the name completionBlockType*/ 
    typealias completionBlockType = (NSString, NSError!) ->Void 

    var test:completionBlockType = {(string:NSString, error:NSError!) ->Void in 
     println("\(string)") 

    } 
    test("helloooooooo test",nil); 
    /*OUTPUTS "helloooooooo test" IN CONSOLE */