如何在 Swift 中声明 typedef

Posted

技术标签:

【中文标题】如何在 Swift 中声明 typedef【英文标题】:How do I declare typedef in Swift 【发布时间】:2014-07-27 11:08:11 【问题描述】:

如果我需要 Swift 中的自定义类型,我可以 typedef,我该怎么做? (类似于闭包语法 typedef)

【问题讨论】:

Apple 是 Apple(~不同~),它们的 typedef 称为 typealias。你读过 Apple 的 Swift Programming Language 了吗? 您也可以在此处在线找到此文档:developer.apple.com/library/prerelease/ios/navigation(而不是包含可能会破坏的直接链接,只需在页面上搜索“Swift Programming Language”) @Kreiri Swift 的typealias 之所以不叫typedef,是因为它的功能远不如typedef,而且更专注于现代编程所需的用例。这遵循了 Swift 的一般设计原则,有一个更大的词典专注于特定的需求,不像 C 的小词典意味着以……creative……的方式组合。如果 Apple 选择将其命名为 typedef,人们会期望它像 C 的 typedef 一样工作。这是微软经常遇到的设计问题——他们会使用既定的名称,但他们的实现方式却不同。 【参考方案1】:

使用关键字typealias代替typedef

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

【讨论】:

我怎样才能使这种闭包的新类型 let completionBlock:(NSString, NSError!) ->Void = strg,error in myString = "Haider" println("My text:(myString) ") typealias newClosure = ((strg1:NSString,num1:NSNumber)->Void)? @WaqasHaiderSheikh 你可以像typealias closureType = (NSString, NSError!) ->Void 那样做。并将其用作let completionBlock:closureType = strg,error in //do something【参考方案2】:

添加到上面的答案:

“typealias”是关键字,使用的是swift,其作用与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")

     

要使用输入参数创建 typedef,语法如下所示:

    /*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 */

【讨论】:

以上是关于如何在 Swift 中声明 typedef的主要内容,如果未能解决你的问题,请参考以下文章

可互操作的 Obj-C typedef NS_ENUM 到 swift

typedef声明变量也是一种求值过程

如何在 Swift 中正确声明变量?

如何在 swift 中声明一个“受保护”变量

如何在 Swift 中声明类级函数?

如何在Swift中声明计算属性'throws'?