2014-06-06 25 views
54

Nếu tôi yêu cầu loại tùy chỉnh trong Swift, tôi có thể typedef, làm cách nào để thực hiện? (Một cái gì đó giống như một typedef cú pháp đóng cửa)Làm cách nào để tôi khai báo typedef trong Swift

+5

của Apple là Apple (~ khác nhau ~), typedef của họ được gọi là 'typealias'. Bạn đã đọc ngôn ngữ lập trình Swift * của Apple chưa? – Kreiri

+0

Bạn cũng có thể tìm thấy tài liệu này trực tuyến tại đây: https://developer.apple.com/library/prerelease/ios/navigation/ (thay vì bao gồm một liên kết trực tiếp có thể phá vỡ chỉ tìm kiếm "Ngôn ngữ lập trình Swift" trên trang) – petert

+2

'typealias' của @Kreiri Swift không được gọi là' typedef' vì khả năng của nó nhỏ hơn nhiều so với 'typedef', và tập trung nhiều hơn vào các ca sử dụng cần thiết trong lập trình hiện đại. Điều này theo nguyên lý thiết kế chung của Swift để có một từ vựng lớn hơn tập trung vào các nhu cầu cụ thể, không giống như từ vựng nhỏ của C có nghĩa là được kết hợp trong… _creative_… cách. Nếu Apple đã chọn gọi nó là 'typedef', mọi người sẽ mong đợi nó hoạt động giống như 'typedef' của C. Đó là vấn đề thiết kế mà Microsoft gặp phải thường xuyên— họ sẽ sử dụng các tên đã được thiết lập nhưng có cách triển khai khác nhau. –

Trả lời

96

Từ khóa typealias được sử dụng ở vị trí của typedef

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

làm thế nào tôi có thể thực hiện một loại mới của đóng cửa này cho phép hoàn thànhBlock: (NSString, NSError!) -> Void = {strg, lỗi trong myString = "Haider" println ("Văn bản của tôi: \ (myString)") } –

+0

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

+0

@WaqasHaiderSheikh Bạn có thể làm như 'typealias closureType = (NSString, NSError!) -> Void'. Và sử dụng nó như 'let completionBlock: closureType = {strg, error in // do something}' –

10

thêm vào câu trả lời ở trên:

"typealias" là từ khóa được dùng là nhanh chóng mà không chức năng tương tự như 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") 

    } 

Để tạo một typedef với đầu vào param cú pháp được như hình dưới đây:

/*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 */ 
Các vấn đề liên quan