开发的第一个iOS app

一步一步仿照着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")
        }
        
    }
}




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值