SwiftYFinance
示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。示例项目包括基本功能演示。
要求
我使用了 Swift 5.0,不会保证向下兼容性,支持 iOS 13 及以上。
安装
SwiftYFinance 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中,然后运行 pod install
pod 'SwiftYFinance'
您可以通过在设备上运行以下命令来尝试在您的设备上运行 Example 项目
pod try SwiftYFinance
基本用法
搜索
/*
* Main class of SwiftYFinance. Asynchronous method's callback always will
* have format: (Some Data?, Error?). If error is non-nil, then data is going to be nil.
* Review Error description to find out what's wrong.
* Synchronous API is also provided. The only difference is that it blocks the thread and
* returns data rather than passing it to the callback.
*/
import SwiftYFinance
// Searches quote in Yahoo finances and returns found results
SwiftYFinance.fetchSearchDataBy(searchTerm:"AAPL", quotesCount=20) {
data, error in
/*
callback: ([YFQuoteSearchResult]?, Error?) -> Void
struct YFQuoteSearchResult{
var symbol: String?
var shortname: String?
var longname: String?
var exchange: String?
var assetType: String?
}
*/
if error == nil{
return
}
print(data!.longname ?? "No long name")
}
同步执行相同的操作
let (data, error) = SwiftYFinance.syncFetchSearchDataBy(searchTerm:"AAPL", quotesCount=20)
if error == nil{
return
}
print(data!.longname ?? "No long name")
尽管在主线程中同步执行命令并不是最佳实践,但我还是将这个功能添加到了项目中。编写快速、不卡顿的应用由您负责,因此请谨慎使用同步方法。
可以通过 fetchSearchDataBy(searchNews:String, ...)
搜索新闻。
基本近期数据
获取关于收集基本信息的标识符的最新数据。
SwiftYFinance.recentDataBy(identifier:"AAPL"){
data, error in
/*
data ~>
struct RecentStockData{
var currency: String?
var symbol: String?
var exchangeName: String?
var instrumentType: String?
var firstTradeDate: Int?
var regularMarketTime: Int?
var gmtoffset: Int?
var timezone: String?
var exchangeTimezoneName: String?
var regularMarketPrice: Float?
var chartPreviousClose: Float?
var previousClose: Float?
var scale: Int?
var priceHint: Int?
}
*/
if error == nil{
return
}
print(data!.regularMarketPrice ?? "No regularMarketPrice")
}
图表数据
获取图表数据点
SwiftYFinance.chartDataBy(
identifier:"AAPL",
start: Date(...),
end: Date(...),
interval = .oneday){
data, error in
/*
data ~>[
struct StockChartData{
var date: Date?
var volume: Int?
var open: Float?
var close: Float?
var adjclose: Float?
var low: Float?
var high: Float?
}
]
*/
if error == nil{
return
}
print(data![0]?.open ?? "Open price is unavailable")
}
某一时刻的图表数据
有时,您需要获取过去某个时刻的数据。使用 recentChartDataAtMoment()
做这件事。
SwiftYFinance.chartDataBy(
identifier:"AAPL",
moment: Date(...),
futureMargin: TimeInterval(...)
){
data, error in
/*
data ~>[
struct StockChartData{
var date: Date?
var volume: Int?
var open: Float?
var close: Float?
var adjclose: Float?
var low: Float?
var high: Float?
}
]
*/
if error == nil{
return
}
print(data![0]?.open ?? "Open price is unavailable")
}
标识符摘要
这部分API非常庞大。Yahoo Finance有大量的摘要模块,我实现了其中几个。尽管如此,您仍然可以从原始JSON参数中获取数据。
我将随着每个版本添加新模块。当前,仅实现了基本模块。
模块 | 支持 | 模块 | 支持 |
---|---|---|---|
calendarEvents | recommendationTrend | ||
summaryProfile | quoteType | ||
industryTrend | price | ||
摘要详情 | 收入报表历史 | ||
资产概况 | 资产负债表历史(季度) | ||
收入报表历史 | 现金流量表历史 | ||
资产负债表历史 | 现金流量表历史(季度) | ||
财务数据 | 美国证券交易委员会文件 | ||
评级提升/降低历史 | 机构持股 | ||
基金持股 | 主要直接持有人 | ||
主要持有人构成 | 内部人士交易 | ||
内部人士持股 | 净股份购买活动 | ||
行业趋势 | 收益 | ||
公司高管 | 收益历史 | ||
收益趋势 | 指数趋势 | ||
符号 | 基金概况 | ||
主要持股 | 基金业绩 | ||
关键统计数据 |
您可以通过调用 summaryDataBy(...)
获取模块
SwiftYFinance.summaryDataBy(identifier: "AAPL", selection = .all){
data, error in
if error != nil{
return
}
print(data)
/*
data ~>
struct IdentifierSummary {
var recommendationTrend:RecommendationTrend?
var summaryProfile:SummaryProfile?
var quoteType:QuoteType?
var price:Price?
var indexTrend:IndexTrend?
var calendarEvents:CalendarEvents?
var summaryDetail:SummaryDetail?
var dataStorage:JSON?
}
*/
// Raw JSON:
print(data.dataStorage)
}
提供多种选择类型。 .all
将获取每个方法,即使尚未支持,也可以从原始JSON获取数据。您可以选择 .supported
,然后只获取支持的数据。您还可以指定特定的模块(例如:.price
)或模块列表(例如:[.price, .summaryDetail]
)
作者
Aleksandr Dremov, [email protected]
许可
SwiftYFinance 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。