iOS - «val» недоступен из-за «внутреннего» уровня защиты (из моего модуля) - PullRequest
0 голосов
/ 10 декабря 2018

Итак, я создал модуль и пытаюсь использовать его в своем проекте.У меня есть эта структура данных:

public struct Device {
  public init() {}

  var id: String = ""
  var serial: String = ""
  var account: String = ""
  var name: String = ""
  var isAttached: Bool?
  var isShared: Bool?
}

У меня есть этот func в парсере:

func getDevices(json: JSON) -> [Device] {
    var devices = [Device]()

    for device in json.arrayValue {
        var item = Device()
        item.account = device["account"].string!
        item.id = device["id"].string!
        item.isAttached = device["isAttached"].boolValue
        item.isShared = device["isShared"].boolValue
        item.name = device["name"].string!
        item.serial = device["serial"].string!
        devices.append(item)
    }
    return devices
}

и этот метод в классе API:

func getDevices( success: @escaping ([Device]) -> Void, failure: @escaping (String) -> Void) {

    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(UserDefaults.standard.string(forKey: "accessToken")!)",
        "X-Account-ID": UserDefaults.standard.string(forKey: "accountToken")!
    ]

    Alamofire.request(Constants.Url.PENDING_DEVICE, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).validate().responseJSON { response in
        if response.result.isSuccess {
            guard let data = response.data else { return }
            let json = JSON(data)
            self.devices = self.helper.getDevices(json: json)
            success(self.devices)
        }

        if response.result.isFailure {
            print("status code is:\(String(describing: response.response?.statusCode))")
            let error : Error = response.result.error!
            print(error.localizedDescription)
            failure(error.localizedDescription)
        }
    }
}

покакогда я использую его в проекте так:

    self.requestManager.getDevice(success: { (devices) in
            for device in devices {
                var item = Device()
                item = device
                item.name //'name' is inaccessible due to 'internal' protection level error

        }
    }) { (error) in
        //
    }

в другой структуре, я создал это прекрасно работает, какие-нибудь идеи?я думал, что public init () {} является тем, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 10 декабря 2018

Если вы строите модуль отдельно и используете его внутри фреймворка, тогда все переменные, объявленные в модуле, должны быть либо public, либо open.

Пример:

public struct Device {
  ...
  ...
  public var name: String = ""
  ...
}

public и open предназначены только для создателей каркаса, что означает вне каркаса (вне проекта:)).

public - это может использоваться объектами внемой фреймворк.

open - public и объекты вне моего фреймворка могут подклассы этого.

...