在Swift 3中使用未声明的类型

rb

我有以下课程返回NOAA气象站的列表。我正在使用它来学习如何处理XML。但是,我在func returnWxStation()->(wxObservationStations)处收到“使用未声明类型的'wxObservationStations'”错误。我正在使用SWXMLHash对XML进行反序列化,但是我不认为这是我的问题(尽管我只是在学习,所以可能是这样)。

class WxObservationStations {

let wxObserStationsURL = URL(string: "http://w1.weather.gov/xml/current_obs/index.xml")

struct wxStation: XMLIndexerDeserializable {
    let stationName: String
    let stationState: String
    let latitude: Double
    let longitude: Double

    static func deserialize(_ node: XMLIndexer) throws -> wxStation {
        return try wxStation(
            stationName: node["station_name"].value(),
            stationState: node["state"].value(),
            latitude: node["latitude"].value(),
            longitude: node["longitude"].value()
        )
    }
}

public var wxObservationStations: [wxStation] = []


private func getStationNamesAndLocations(url: URL, completion:@escaping (XMLIndexer) -> ()) {

    Alamofire.request(url).responseJSON { response in
        //                print(response) // To check XML data in debug window.
        let wxStationList = SWXMLHash.parse(response.data!)
        print(wxStationList)
        completion(wxStationList)

    }
}

//The error is here:
func returnWxStation() -> (wxObservationStations) {
    getStationNamesAndLocations(url: wxObserStationsURL!, completion: { serverResponse in
        do {
            self.wxObservationStations = try serverResponse["wx_station_index"]["station"].value()

        } catch {

        }
    })
      return self.wxObservationStations
}
}

有什么想法吗?该变量在类中声明,我想使用它将数据发送回请求的对象。提前致谢。

wxObservationStations不是一个类型,所以它没有任何意义说

func returnWxStation() -> (wxObservationStations) { ... }

您要回程self.wxObservationStations,类型为[wxStation]所以方法声明应该是

func returnWxStation() -> [wxStation] { ... }

顺便说一句,如果您坚持使用可可命名约定,那么您的生活将会更加轻松,即类型应以大写字母开头。所以wxStation我建议不要使用类型WxStation


您的以下方法将无法实现您想要的:

func returnWxStation() -> [wxStation] {
    getStationNamesAndLocations(url: wxObserStationsURL!, completion: { serverResponse in
        do {
            self.wxObservationStations = try serverResponse["wx_station_index"]["station"].value()
        } catch {

        }
    })

    return self.wxObservationStations
}

该方法getStationNamesAndLocations异步运行,并且在实际返回self.wxObservationStations的时间之前不会填充的方法returnWxStation

getStationNamesAndLocations方法的全部目的是为您提供一个带有完成处理程序的不错的异步方法。我会returnWxStation完全从您的代码中删除。或执行类似的操作:

func returnWxStation(completionHandler: ([wxStation]?) -> Void) {
    getStationNamesAndLocations(url: wxObserStationsURL!) { serverResponse in
        do {
            let stations = try serverResponse["wx_station_index"]["station"].value()
            completionHandler(stations)
        } catch {
            completionHandler(nil)
        }
    }
}

您将像这样使用它:

returnWxStation() { stations in
    guard let stations = stations else {
        // handle error here
        return
    }

    // use `stations` here
}

// but not here

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

NSMultipleValuesMarker在Swift 3中使用未声明的类型

在Swift 3中使用未声明的类型“ Decodable” /“ Codable”

在Swift中使用未声明的类型'UIImage'

在Swift项目中使用未声明的类型

在字典扩展(Swift)中使用未声明的类型'KeyType'

升级到Swift 3时使用未声明的类型

ViewController中的Swift错误“使用未声明的类型”

如何修复Swift 5.1中的“使用未声明类型”错误?

使用未声明的类型'MFMessageComposeViewControllerDelegate swift'

Swift:错误:使用未声明的类型'T'

Swift 2.0使用未声明类型的UIColor

使用未声明类型的'RoboViewController'Swift

使用未声明类型的tableViewCell Swift

Swift编译器错误:在框架中使用未声明的类型

Json解析错误:在Swift iOS中使用未声明的类型'Foundation'

未声明的类型-通过桥接标头在Swift中使用C结构

在Swift中导入Swift框架:“使用未声明的类型'MyCustomView'”

Alamofire4 / Swift3中的Response <AnyObject,NSError>未声明类型

在Swift中对我自己的ViewController进行单元测试时,使用未声明的类型'ViewController'吗?

为什么在Swift中发生“使用未声明类型的UITableView”?

Cordova swift插件:使用未声明的类型“ CDVPlugin”

Swift-使用未声明的类型'GTMOAuth2Authentication'

使用未声明的类型'Date'Xcode 9 Swift 4

swift 通知中心使用未声明的类型名称错误

Swift 上的 Firebase IOS:使用未声明的类型“DatabaseReference”

即使类型是内部的,并且存在于同一模块中,Swift也会“使用未声明的类型”

在Swift中使用类型约束声明属性

为什么在Swift所属类型中未声明运算符重载?

Swift代码中Obj C枚举的Xcode 7.3未声明类型