加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift函数参数

发布时间:2020-12-14 04:54:14 所属栏目:百科 来源:网络整理
导读:我有一个像下面这样的单身APIService import Foundationimport Alamofireimport SwiftyJSONtypealias Success = JSON - Voidtypealias Failure = NSError? - Voidclass APIService { private let BaseURL = "http://api.openweathermap.org/data/2.5" class
我有一个像下面这样的单身APIService

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,就像这样,没关系

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


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


    }

}

但是当我像这样调用func时,它是编译错误

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>::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中,一切都还好,太有线了,需要帮助

解决方法

我不认为这是答案.

if error != nil && failure != nil {
    failure!(error)
} else {
...

应该

if error != nil {
   failure ?? failure(error) // or: failure?(error)
} else {
...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读