如何在 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的主要内容,如果未能解决你的问题,请参考以下文章