您的位置:首页 > 移动开发

开发的第一个iOS app

2015-09-14 16:35 323 查看
一步一步仿照着imooc的Jake Lin大神做的swift weather 写的,虽然说不算是自己原创,收获还是不少的。

首先Jake写的是用AFNetworking。我是直接用Alamofire + SwiftyJson写的

不知道是不是xcode的版本问题 导入AFNetworking 和Alamofire总是错误 弄了两天才把Alamofire导入进去。



下面开始说说学习历程吧

我从9月8号开始学习swift

花了两天时间把swift的基础看完了

跟着课程写了一些demo 了解了字符串 判断 循环 元组 可选型等用法 有的是没接触过的

然后就开始写一个有关天气预报的app







以下是swift代码

//
// ViewController.swift
// Swift Weather
//
// Created by chingyam on 15/9/11.
// Copyright (c) 2015年 chingyam. All rights reserved.
//

import UIKit
import Alamofire
import CoreLocation
import SwiftyJSON

class ViewController: UIViewController , CLLocationManagerDelegate{
let locationManager = CLLocationManager()

@IBOutlet weak var loadinglabel: UILabel!
@IBOutlet weak var loadingindicator: UIActivityIndicatorView!
@IBOutlet weak var temperature: UILabel!
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var location: UILabel!
@IBOutlet weak var Lon: UILabel!
@IBOutlet weak var Lat: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let background = UIImage(named:"background.png")
//获取背景图片对象
self.view.backgroundColor = UIColor(patternImage: background!)
//设置背景图片
locationManager.delegate = self
//初始化LocationManager
locationManager.desiredAccuracy = kCLLocationAccuracyBest
//设置LocationManger精度 设置为最好
self.loadingindicator.startAnimating()
//开始播放indicator动画
if(ios8()){
//判断设备系统版本
locationManager.requestAlwaysAuthorization()
}
locationManager.startUpdatingLocation()
//开始更新地理位置信息
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func ios8() ->Bool
{
var systemVersion = (UIDevice.currentDevice().systemVersion as NSString).doubleValue
//获取系统版本信息
println(systemVersion)
return systemVersion >= 8.0
//版本信息>=8.0返回true 否则返回false
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
var location:CLLocation = locations[locations.count-1] as! CLLocation
//获取最新的地理位置信息
if (location.horizontalAccuracy > 0) {
//判断是否获取到正确的地理位置信息
self.locationManager.stopUpdatingLocation()
//停止更新地理位置信息
println(location.coordinate.latitude)
println(location.coordinate.longitude)
self.Lon.text = "经度:" + String(stringInterpolationSegment:location.coordinate.longitude)

self.Lat.text = "纬度:" + String(stringInterpolationSegment:location.coordinate.latitude )
//设置label显示经纬度
self.updateWeatherInfo(location.coordinate.latitude,longitude:location.coordinate.longitude)
//将经纬度以参数的形式传入到更新天气信息的函数中

}
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!)
{
println(error)
self.loadinglabel.text = "地理位置信息不可用"
//抓取地理位置信息中的错误
}
func updateWeatherInfo(latitude:CLLocationDegrees , longitude:CLLocationDegrees){
//var lat = "?lat=" + String(stringInterpolationSegment: latitude)
// var lon = "&lon=" + String(stringInterpolationSegment: longitude)
// var url = "http://api.openweathermap.org/data/2.5/weather" + lat + lon + "&cnt=0"
var url = "http://api.openweathermap.org/data/2.5/weather"
let params = ["lat":latitude,"lon":longitude,"cnt":0]
//调用天气api的url 和参数
Alamofire.request(.GET, url , parameters: params ).responseJSON{
//调用Alamofire库中的request方法
(request, response,data, error) -> Void in
if(error != nil){
//当没有返回值的时候返回错误
println("Error:\(error)")
println(request)
println(response)
}
else{
println("Success:\(url)")
// println(request)
var json = JSON(data!)
println(json)
self.updateUISuccess(json)
//当返回成功地时候,取出json传入到更新UI的函数当中去
}
}
}
func updateUISuccess(json :JSON){
self.loadingindicator.stopAnimating()
self.loadingindicator.hidden = true
//当获取到json数据的时候,停止indicator动画并且隐藏
self.loadinglabel.text = nil
//加载的标签设置为nil
println(json["name"].string!)
if let tempResult = json["main"]["temp"].double
{
//获取温度信息
var temperature: Double
temperature = round(tempResult - 272.15)
//温度信息为开氏度 转化为摄氏度
self.temperature.text = "\(temperature)°C"
self.temperature.font = UIFont.boldSystemFontOfSize(60)
var cityName = json["name"].stringValue
//获取城市信息
self.location.font = UIFont.systemFontOfSize(40)
self.location.text = "\(cityName)"

var condition = json["weather"][0]["id"].intValue
var sunset = json["sys"]["sunset"].doubleValue
var sunrise = json["sys"]["sunrise"].doubleValue
//获取状态以及日出日落的时间
var nightTime = false
var now = NSDate().timeIntervalSince1970

if ( now > sunset || now < sunrise ){
nightTime = true
}
//判断当前时间是否晚上
self.updateWeatherIcon(condition , nightTime:nightTime)
//将状态和是否晚上的信息传入到updateweathericon的函数当中
}
else{
//如果未获取到温度信息,则说明天气信息不正确,提示用户天气信息不可用
self.loadinglabel.text = "天气信息不可用"
}
}
func updateWeatherIcon (condititon :Int , nightTime :Bool){
//http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes
//根据api提供的信息对应的天气情况作判断,设置天气图标
if( condititon < 300 )
{
if nightTime {
self.icon.image = UIImage(named: "tstorm1_night")
}
else{
self.icon.image = UIImage(named: "tstorm1")
}
}
else if (condititon < 500){
self.icon.image = UIImage(named:"light_rain")
}
else if(condititon < 600){
self.icon.image = UIImage(named:"shower3")
}
else if(condititon < 700){
self.icon.image = UIImage(named: "snow4")
}
else if (condititon < 771){
if(nightTime){
self.icon.image = UIImage(named:"fog_night")
}
else{
self.icon.image = UIImage(named:"fog")
}
}
else if(condititon < 800){
self.icon.image = UIImage(named:"tstorm3")
}
else if(condititon < 804){
if(nightTime){
self.icon.image = UIImage(named:"cloudy2_night")
}
else{
self.icon.image = UIImage(named:"cloudy2")
}
}
else if(condititon == 804){
self.icon.image = UIImage(named:"overcast")
}
else if((condititon >= 900 && condititon < 903)||(condititon > 904 && condititon < 1000)){
self.icon.image = UIImage(named:"tstorm3")
}
else if (condititon == 903){
self.icon.image = UIImage(named:"snow5")
}
else if (condititon == 904){
self.icon.image = UIImage(named:"sunny")
}
else{
self.icon.image = UIImage(named:"dunno")
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios swiftweather