首页 > 解决方案 > 根据条件使用 switch case

问题描述

我制作了一个名为Constants.swift. 在此之内,我做了一个这样的课程......

public class WebServices {
    static let getMyPlants : String = "plant/getPlants"
    static let getMyOrganizations: String = "organization/getOrganizations"
}

现在,每当我在项目中的任何地方使用 api 时,我都会使用Webservices.getMyPlants.

现在我也有每个 API 的 base-url。就像下面提到public class WebServices....的那样..

struct envDev {
    var BASEURL : String = "http://api-proj-dev.ii.the-co.com/api/"

}

现在,base-urlWebservices.getMyOrganizations不同了。我想在其中使用一个条件struct envDev,如果我选择了Webservices.getMyOrganizations,那么我可以给出不同的BASEURL。就像是...

 //The below code isn't right. I just wrote it to represent the kind of solution I wish to have. 

    struct envDev {
            var BASEURL : String = "http://api-proj-dev.ii.the-co.com/api/"

            if Webservices.getMyOrganizations {
              var BASEURL : String = "http://my second base-url.." 
            }
        }

编辑 1在签名下方给出APIHelper

class APIHelper: NSObject {


    var API: NSString

    var json: NSString

    var receivedJSON: NSString?

    var arrResult: NSMutableArray = []

    let esmatBaseUrl = AppDelegate().currentUser //This is given in AppDelegate as `var currentUser = envDev()`
()

编辑 2baseUrl在 APIHelper 中包含计算属性和错误。

class APIHelper: NSObject {


        var API: NSString

        var json: NSString

        var receivedJSON: NSString?

        var arrResult: NSMutableArray = []

        let esmatBaseUrl = AppDelegate().currentUser //This is given in AppDelegate as `var currentUser = envDev()`
    ()

        var baseUrl: String {
        esmatBaseUrl.baseUrl(forApi: API as String) // Here I'm getting the error as `Value of type 'envDev' has no member 'baseUrl'`
    }

标签: iosswift

解决方案


envDev无法知道发生了什么APIHelper,所以你需要一种方法来传递APIfrom APIHelperto envDev。这意味着它BASEURL不应该是一个属性,而是一个方法:

func baseUrl(forApi api: String) -> String {
    switch api {
    case WebServices.getMyPlants: return "some url"
    case WebServices.getMyOrganizations: return "some other url"
    default: fatalError()
    }
}

然后在 中APIHelper,您可以添加一个baseUrl调用上述方法的计算属性:

var baseUrl: String {
    esmatBaseUrl.baseUrl(forApi: API as String)
}

这意味着您需要将esmatBaseUrl.BASEURL现有代码中所有出现的 更改为 just baseUrl

另外,我建议不要在 Swift 中使用NSString,NSArray等。你应该和他们的 Swift 对应:String[T].


推荐阅读