2016-12-20 2 views
0

Я строю проект с использованием Swift 3 и Xcode 8.1. Сначала я создал клиент API, использующий Siesta в фреймворке, и я включаю его в свой почтовый проект, но когда я пытаюсь использовать структуру из фреймворка, чтобы сделать downcast, я получаю сообщение об ошибке No type named 'Business' in module 'ApiClient', я пробовал использовать его как ApiClient.Business, но не успевает ...Swift structs: нет типа «Бизнес» в модуле

Мои рамки находятся в рабочем пространстве вместе с другими зависимостями, введенными carthage, и я могу вызывать из него другие экземпляры (например, сам API), но мне нужно получить доступ к этому, чтобы иметь возможность понижать результаты. Я также попытался добавить рамки под Link Binary с библиотеками, Источники Compile, Встраивание Каркасы, Embedded Бинарные и Linked Каркасы и библиотеки, но не может заставить его работать ...

Вот мой код

// 
// BusinessesViewController.swift 
// 

import UIKit 
import ApiClient 
import Siesta 

class BusinessesViewController: UIViewController, ResourceObserver{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     globalInstance.MyAPI.businesses.addObserver(self).loadIfNeeded() 
    } 

    func resourceChanged(_ resource: Resource, event: ResourceEvent) { 

     let businesses: Array = resource.typedContent(ifNone: []) 
     if(businesses.count > 0){ 
      let object : ApiClient.Business = businesses[0] as! ApiClient.Business // <-- error here 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 



// 
// global.swift 
// 

import Foundation 
import ApiClient 

class Global { 
    var MyAPI :ApiClientService 

    init() { 
     MyAPI = ApiClientService(baseURL: "http://test.myproject.com") 
    } 

} 
var globalInstance = Global() 



// 
// Business.swift -- from ApiClient framework 
// 

import SwiftyJSON 
import Foundation 
struct Business { 
    let name, id: String? 
    let userId: Int? 
    let description: String? 

    init(json: JSON) throws { 
     id   = json["id"].string 
     userId  = json["user_id"].int 
     name  = json["name"].string 
     description = json["description"].string 
    } 
} 

ответ

1

Это была ошибка нуб, просто нужно добавить public в структуры :)

+0

У меня такая же проблема. Мой протокол написан быстро и не добавляется автоматически в файл заголовка framework.h, поэтому я добавил файл .swift в общедоступные заголовки, но он все еще не найден. (ошибка, которую я получаю, - «Нет типа с именем« имя протокола »в модуле« frameworkName ».) Любая помощь с этим была бы очень благодарна. Я также добавил публикацию в протокол ... – Jeremie

+0

@ Jeremie, не имея больше контекста и код трудно сказать. Возможно, стоит проверить, есть ли у вас «import Foundation», а также связать его с целевой средой. –

Смежные вопросы