Table of Contents
Reaaliaikaisen iOS-osakemarkkinakojelautan rakentaminen vaatii vankkaa otetta verkottumisesta, tietojen käsittelystä ja kaavion renderoinnista. Tämä opas kattaa koko työnkulun projektin setup- ja API-integroinnista live-päivityksiin ja suorituskykyyn virittämällä.
Edeltävät opinnot ja Tooling
Ennen kuin aloitat, varmista, että ympäristösi on valmis:
- macOS, jossa on Xcoden viimeisin versio asennettuna.
- Swift 5.7+ .
- Alamofire[ . ... korkean tason verkkokirjasto HTTP-pyyntöjen ja vastausten käsittelyn yksinkertaistamiseksi. Integroi Swift Package Manager (SPM) tai CocoaPods.
- Kirjasto [ .
- ]A osaketiedot API[ . . suosittuja vaihtoehtoja ovat Alfa Vantage[ (vapaa taso API-avaimella), ].IEX Cloud tai Finnhub. Jokainen tarjoaa reaaliaikaisia ja historiallisia päätetapahtumia.
- CocoaPods tai SPM . SPM on rakennettu Xcode ja suositellaan.
Projektin asetukset ja riippuvuudet
Luo uusi Xcode-projekti App-mallilla iOS 16+:ssa. Tiedosto > Lisää paketit[, lisää Alamofire ja kaaviot. Alamofire-sivuston päähaarassa käytetään ja kaavioiden käyttöä . Tämä välttää manuaalisen latauksen ja pitää riippuvuutesi ajan tasalla.
Kun olet lisätty, määritä [Info.plist, jotta verkkoyhteys (HTTP tarvittaessa) on App Transport Security poikkeus oman API-verkkotunnuksen, tai parempi, käyttää HTTPS päätepisteitä.
Datamallien suunnittelu
Luo rakenne, joka heijastaa JSON-rakennetta, jonka palveluntarjoajasi on palauttanut. Useimmat API-ohjelmat palauttavat kohteita, joiden kentät ovat , , [, [], [[[]] ja [[[]]. Reaaliaikaisen kojelaudan osalta keskity viimeisimpiin hintoihin ja liikkuvan ikkunan historiallisia tietoja (esim. viimeiset 100 rastia).
struct StockDataPoint: Codable {
let timestamp: TimeInterval
let price: Double
let volume: Int
}
Määrittele astia, jossa on joukko näitä pisteitä, plus metatiedot kuten symboli ja viimeinen päivitysaika. Käytä verrataksesi käärme koteloa API:stä kamelikakkuun Swiftissä.
Verkkotaso reaaliajassa kapasiteetilla
Luo luokka, jossa Alamofire-koodia käytetään tietojen noutamiseen. Reaaliaikapäivityksiä varten on kaksi lähestymistapaa:
- Polling[] . ... ......................................................................................................................................................................................................................................
- WebSocket[ . ... ylläpitää jatkuvaa yhteyttä saadakseen työntöpäivityksiä (jota Finnhub, IEX jne.).
Toteuta menetelmä, joka palauttaa kustantajan tai käyttää -mallia uusimman tiedon hakemiseen. Äänestysten yhteydessä on esitettävä [] kuvamalli. WebSockets-sovelluksessa käytetään Apple.s tai Starscreamin kaltaista kirjastoa (vaikka Alamofire 5:llä on myös kokeellinen WebSocket-tuki).
Esimerkki fetch-toiminto:
func fetchLatestPrice(for symbol: String) async throws -> StockDataPoint {
let url = "https://api.example.com/quote?symbol=\(symbol)&apikey=\(apiKey)"
let response = try await AF.request(url).serializingDecodable(StockDataPoint.self).value
return response
}
Jäsennys- ja tallennustiedot
Näkymämallin tulisi käsitellä vastaus, kartoittaa se kartoittaa merkinnät ja ylläpitää puskuri viimeaikaiset kohdat. Käytä ominaisuuksia niin SwiftUI tai Uikit näkymät voivat reagoida muutoksiin. Esimerkiksi ylläpitää joukko objekteja (kaavioiden kirjastosta), jotka edustavat viimeisiä N-tietopisteitä.
Kun uusia tietoja saapuu, liitä merkintä ja leikata vanhoja pitää kaavion näkymä rajallinen. Tämä estää muistin turpoaa ja pitää kaavion luettavissa.
Rakennamme kaaviota kaaviokirjastolla
Vedä Charts-kirjastosta tarinataulullesi tai instantioi se ohjelmallisesti. Aseta sen rajoitteet ja määritä ulkonäkö:
- Käytetään ] -rakenteita.
- Ota käyttöön hintalappuja, mutta rajoita muutamaan viimeiseen kohtaan välttääksesi sotkua.
- Aseta tasaisempiin riveihin.
- Muokkaa kohteiden akselia ... x-akselin (aika) ja y-akselin (hinta) muotoilussa.
Esimerkki:
let entries = stockDataPoints.map { ChartDataEntry(x: $0.timestamp, y: $0.price) }
let dataSet = LineChartDataSet(entries: entries, label: "\(symbol) Price")
dataSet.drawCirclesEnabled = false
dataSet.lineWidth = 2
dataSet.setColor(.systemBlue)
let chartData = LineChartData(dataSet: dataSet)
lineChartView.data = chartData
Reaaliaikapäivityksiä varten voit palauttaa koko datan jokaisessa rastissa. Sen sijaan lisää uusi merkintä ja soita päivittääksesi näkymää asteittain.
Reaaliaikapäivitysstrategiat
Potku ajastimen kanssa
Käytä -mallia. Virheellinen se, kun näkymä katoaa. Huomioi API-nopeusrajat . Vapaat tasot sallivat usein vain 5...10 pyyntöä minuutissa. Käytä pidempiä väliaikoja (10.15 sekuntia) ja paljasta konfiguroitava virkistysnopeus.
WebSocket- yhteys
Jos API tukee WebSocketsia, luo yhteys, kun näkymä ilmestyy ja soita [] silmukkaan saadaksesi streamed dataa. Määrittele jokainen saapuva viesti JSONina ja päivitä kaavio. Esimerkkinä :
let task = session.webSocketTask(with: url)
task.resume()
func receive() {
task.receive { result in
switch result {
case .success(let message):
if case .string(let text) = message,
let data = text.data(using: .utf8),
let point = try? JSONDecoder().decode(StockDataPoint.self, from: data) {
DispatchQueue.main.async { self.updateChart(with: point) }
}
self.receive()
case .failure(let error):
// reconnect logic
}
}
}
WebSockets vähentää latenssia ja verkkokuormaa, mutta vaatii käsittelyä uudelleenkytkeytyminen ja säilyvyys ping.
Käyttöliittymän asettelu ja resonanssi
Kojelautaan tulisi sisältyä:
- hakupalkki tai poimintapalkki[, joka syöttää varastotunnuksen.
- nykyinen hintamerkki[, joka päivittää animaatiolla (esim., flash green/red for price crease/development).
- -rivikaavio, joka ottaa suurimman osan näyttötilasta.
- Lisämittarit: päivittäinen muutosprosentti, suuri/pieni, tilavuus.
- tilan osoitin, josta näkyy yhteyden tila (liitin / irrotettu / lastaus).
Käytä SwiftUI-järjestelmää ilmoittavaan ulkoasuon tai UIKit-järjestelmään Auto Layout-toiminnolla. Varmista, että raskas työ (parsing, kaaviotietojen rakenne) irtoaa päälangasta. Lähetä käyttöliittymäpäivitykset tuotteeseen .
Virheen käsittely ja selviytyminen
Verkkohäiriöt ovat väistämättömiä. Toteuta uudelleen logiikka eksponentiaalisella backoff-toiminnolla HTTP-pyyntöihin ([]Alamofire.S RequestRetrier[]). WebSockets-sovelluksessa kuuntelet lähikoodeja ja yrität uudelleenyhdistää viiveen jälkeen. Näytä käyttäjäystävällinen virhetunnus tai paikkakartta, kun tiedot ovat himmentyneet.
Käytä kanssa virheiden käsittelyyn hienovaraisesti. Lokivirheet etäpalveluun kuten Crashlytics vain tuotannossa.
Suorituskyvyn optimointi
Reaaliaikainen kaaviopäivitykset monta kertaa minuutissa. Jotta käyttöliittymä olisi sujuva:
- Rajataan datapisteiden määrä kiinteään ikkunaan (esim. 200 tietuetta).
- Poista piirustukset tarpeettomista elementeistä (, , ainoastaan kerrannaisista).
- Käytä kerrostausta[ Uikitissa tai suosi mieluummin SwiftUI.s metallista tuettua säveltämistä varten.
- Surffaa päivitykset: jos WebSocket-viestit saapuvat nopeammin kuin näytön virkistysnopeus (60 Hz), erä useita pisteitä yhdeksi kaaviopäivitykseksi.
Kojelautaa testataan
Kirjoita yksikkötestit datan jäsentämiseen ja verkkopäällikön kanssa käyttäen pilkkaa JSONin vastauksia. Käytä tai simuloidaksesi API-vastauksia. Kaaviokuvaa varten :lla voidaan todentaa oikea renderointi päivitysten jälkeen. Testaa reaaliaikaista käyttäytymistä UI-kokeilla, jotka ruiskuttavat aikaistettua pilkkaa tietoa mukautetun palvelimen kautta.
Käyttöönottoa koskevat näkökohdat
Säilytä API-näppäintä turvallisesti . Käytä ympäristömuuttujia Xcode-järjestelmissä tai , että. Harkitkaa paikallisen välimuistin (esim., Core Data) toteuttamista, joten kojelauta näyttää viimeisimmät tiedossa olevat tiedot välittömästi käynnistettäessä tuoreita tietoja.
App Store -sovelluksen toimittamisen yhteydessä varmista, että sovellus kunnioittaa tausta-app-päivitysasetuksia ja käyttää [BGTaskScheduler:tä, jos haluat ajoittaisia päivityksiä, kun sovellusta ei ole tulostettu, vaikkakin tosi reaaliaikaisen tuntuman vuoksi WebSocket-yhteydet toimivat vain etualalla.
Päätelmät
Yhdistämällä Alamofire verkkopyyntöihin, Charts-kirjasto visualisointia varten ja joko äänestysten tai WebSockets-versioiden live-päivityksiä varten voit rakentaa vankan reaaliaikaisen osakemarkkinoiden kojelauta iOS-järjestelmälle. Keskity puhtaaseen arkkitehtuuriin, hienostuneeseen virheiden käsittelyyn ja suorituskyvyn viritykseen, jotta käyttäjät voivat luottaa ammatilliseen kokemukseen. Muista noudattaa API-korkorajoja ja antaa selkeää palautetta, kun tiedot viivästyvät. Näillä perustuksilla voit laajentaa kojelaudan useita symboleja, teknisiä indikaattoreita tai jopa katselulistan hallintaa.