首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift函数参数

Swift函数参数
EN

Stack Overflow用户
提问于 2014-10-30 07:41:44
回答 1查看 1.2K关注 0票数 5

我有一个单例APIService,如下所示

代码语言:javascript
复制
import Foundation
import Alamofire
import SwiftyJSON

typealias Success = JSON -> Void
typealias Failure = NSError? -> Void

class APIService {

    private let BaseURL = "http://api.openweathermap.org/data/2.5"

    class var instance: APIService {
        struct Singleton {
            static let instance: APIService = APIService()
        }
        return Singleton.instance
    }

    func currentWeather(cityName: String, success:Success?, failure:Failure?) {
        let url = BaseURL + "/weather"
        Alamofire.request(.GET, url, parameters:["q" : cityName])
            .responseJSON { (_, _, jsonObject, error) in
                if error != nil && failure != nil {
                    failure!(error)
                } else {
                    let json = JSON(jsonObject!)
                    if success != nil {
                        success!(json)
                    } else {
                        println(json)
                    }
                }                                
        }
    }
}

当我在其他地方调用这个函数时,比如UIViewController,就像这样,它没问题

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


        APIService.instance.currentWeather("San Gabriel", success: nil, failure: {error in println(error)})


    }

}

然而,当我像这样调用函数时,它是编译错误

代码语言:javascript
复制
APIService.instance.currentWeather("San Gabriel", success: {json in println(json)}, failure: {error in println(error)})

0  swift                    0x0000000101f2da68 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x0000000101f2df54 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff95838f1a _sigtramp + 26
3  libsystem_platform.dylib 0x00007fff5e9903d8 _sigtramp + 3373626584
4  swift                    0x00000001013d1f8c swift::Lowering::SILGenFunction::emitIgnoredExpr(swift::Expr*) + 108
5  swift                    0x00000001013f1829 swift::Lowering::SILGenFunction::visitBraceStmt(swift::BraceStmt*) + 297
6  swift                    0x00000001013f48e8 swift::ASTVisitor<swift::Lowering::SILGenFunction, void, void, void, void, void, void>::visit(swift::Stmt*) + 152
7  swift                    0x00000001013c0da1 swift::Lowering::SILGenFunction::emitValueConstructor(swift::ConstructorDecl*) + 5617
8  swift                    0x000000010139c04a swift::Lowering::SILGenModule::emitConstructor(swift::ConstructorDecl*) + 666
9  swift                    0x000000010139d8bb swift::SILModule::constructSIL(swift::Module*, swift::SourceFile*, swift::Optional<unsigned int>) + 475
10 swift                    0x000000010139d968 swift::performSILGeneration(swift::SourceFile&, swift::Optional<unsigned int>) + 72
11 swift                    0x0000000101273e18 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 3432
12 swift                    0x000000010127196d main + 1677
13 libdyld.dylib            0x00007fff93e515c9 start + 1
Stack dump:
0.  Program arguments: 
1.  While silgen emitConstructor SIL function @_TFVSC20NSJSONReadingOptionsCfMS_FT_S_ for 'init' at <invalid loc>

如果我把这个函数放在UIViewController中,一切又都好了,太有线了,需要帮助

EN

回答 1

Stack Overflow用户

发布于 2014-10-30 10:04:28

我不认为这是答案。

代码语言:javascript
复制
if error != nil && failure != nil {
    failure!(error)
} else {
...

应该是

代码语言:javascript
复制
if error != nil {
   failure ?? failure(error) // or: failure?(error)
} else {
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26642560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档