小编wan*_*der的帖子

在Swift中使用泛型的EXC_BAD_ACCESS

相关问题:Swift中的通用完成处理程序

在我写的Swift应用程序中,我正在下载JSON,我想将其转换为模型对象.现在,我这样做:

func convertJSONData<T: Entity>(jsonData: NSData?, jsonKey: JSONKey, _: T.Type) -> [T]? {
        var entities = [T]()
        if let data = jsonData {

            // Left out error checking for brevity

            var json = JSON(data: data, options: nil, error: nil)
            var entitiesJSON = json[jsonKey.rawValue]

            for (index: String, subJson: JSON) in entitiesJSON {

                // Error: EXC_BAD_ACCESS(code=EXC_I386_GPFLT)

                let entity = T(json: subJson)
                entities.append(entity)
            }
        }
        return entities
    }
Run Code Online (Sandbox Code Playgroud)

每个对象符合Entity工具init(json: JSON).JSONSwiftyJSON库中定义的类型.这也是枚举看起来有点奇怪的原因.

我打电话给convertJSONData()这个方法:

public …
Run Code Online (Sandbox Code Playgroud)

generics exc-bad-access ios swift

5
推荐指数
1
解决办法
961
查看次数

Swift中的通用完成处理程序

我有一个方法,有一个名为的方法performRequest().它需要一个JSONRequest参数.JSONRequest看起来像这样:

public typealias JSONCompletionHandler = ([Entity]?, NSError?) -> Void

public class JSONRequest: Request {
    public var completionHandler: JSONCompletionHandler
    public var endPoint: String
}
Run Code Online (Sandbox Code Playgroud)

而且performRequest()看起来是这样的:

public func performJSONRequest<T where T: Entity>(jsonRequest: JSONRequest, _: Type) {
        // Make a request which returns a data object
        var entities = self.convertJSONData(data, jsonKey: jsonRequest.jsonKey, T.self)
        // Error: 'T' is not identical to 'Entity'
        jsonRequest.completionHandler(entities, error)
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它调用convertJSONData()如下所示:

func convertJSONData<T where T: Entity>(jsonData: AnyObject, _: T.Type) …
Run Code Online (Sandbox Code Playgroud)

generics closures swift

2
推荐指数
1
解决办法
4207
查看次数

标签 统计

generics ×2

swift ×2

closures ×1

exc-bad-access ×1

ios ×1