Swift / iOS SDK:具有类类型/名称关闭/块问题的泛型函数

Django的

我正在尝试编写一个通用类,该类采用自定义类名并创建该类名的实例。在创建之前和之后,我都会做一些适用于所有类的常规工作。我想向实例添加一些特定于类的参数。这就是为什么我添加了一个闭包,该闭包在创建实例后以实例对象本身作为闭包的参数被调用。闭包是可选的。有趣的是,在不使用闭包的情况下调用该函数的效果很好,如果添加闭包,则会出现以下编译器错误:

类型名称后的预期成员名称或构造函数调用

此编译器错误适用于第一个参数,这没有任何意义,因为仅使用第一个参数调用该函数就可以正常工作...

我添加了用于Playground的简单示例:

class Base {
    var test1: Int = 0
}

class A: Base {
    var test2: Int = 0
}

class B: Base {
    var test3: Int = 0
}

func create<T: Base>(aClass: T.Type, addParameter:((T) -> Void)? = nil) {
    println("Do generic stuff before object is created")

    var object = aClass()

    // Add custom class specific parameters to object
    if let l_addParameter = addParameter {
        l_addParameter(object)
    }

    println("Do generic stuff after object was created")
}

create(A)
create(B)
create(B, addParameter: { (b: B) -> Void in
    b.test3 = 1000
})

任何帮助将非常感激!谢谢!

马丁·R

传递一个正确的方法TypeClassName.self,如

create(A.self)
create(B.self, addParameter: { (b: B) -> Void in
    b.test3 = 1000
})

(而且我无法告诉您,.self如果在没有附加参数的情况下调用该函数,为什么省略该方法)。

进行了此更正后,您的代码可以正确编译,但无法正常工作。Swift Generic Factory中所述:错误?,您必须init在基类中添加必需的方法,

class Base {
    required init() { } // ***
    var test1: Int = 0
}

否则

var object = aClass()

将始终创建基类的对象,而不是实际类型的对象(作为参数传递的对象)(因此b.test3 = 1000在闭包中将异常终止)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ios Swift图表问题

来自分类Dev

iOS Swift TableviewCell问题

来自分类Dev

Swift:检查泛型函数的返回类型

来自分类Dev

具有Objective-C功能的Swift块语法[Venmo-iOS-SDK]

来自分类Dev

iOS从Swift使用框架导入Swift类

来自分类Dev

iOS Swift popToViewController按名称

来自分类Dev

iOS Swift和Facebook SDK

来自分类Dev

iOS Swift和Facebook SDK

来自分类Dev

iOS / Swift:UITableViewCell高度问题

来自分类Dev

Cocoapods路径问题(iOS Swift)

来自分类Dev

iOS / Swift:UITableViewCell高度问题

来自分类Dev

iOS Swift 3 POST 问题

来自分类Dev

iOS Swift 3 发布问题

来自分类Dev

使用Swift iOS导入类

来自分类Dev

iOS Swift类符合协议

来自分类Dev

带有 closure 的 Swift 泛型函数

来自分类Dev

Swift 中的泛型函数

来自分类Dev

Swift 实现泛型函数

来自分类Dev

Swift中具有Equatable和Printable作为参数的泛型函数和属性

来自分类Dev

iOS Swift Pass关闭作为财产?

来自分类Dev

如何使用Swift在iOS中关闭ViewController

来自分类Dev

如何编写枚举类型的Swift泛型函数?

来自分类Dev

具有泛型类型的 swift 扩展函数 - isEmpty for FetchedResults

来自分类Dev

installing AWS ios sdk in swift project

来自分类Dev

在swift项目中安装AWS ios SDK

来自分类Dev

iOS 8 SDK,Swift,MapKit绘制路线

来自分类Dev

Swift / iOS:分析(lldb)崩溃,PayPal iOS SDK

来自分类Dev

旋转UIImage中的问题-IOS / Swift

来自分类Dev

在iOS Swift中传递``自我''问题