本文共 5839 字,大约阅读时间需要 19 分钟。
class FastCar:Car{ var window:Int? // 可选型变量 override func drive() { super.drive()//调用父类的方法。 print("开快车") }}let fastCar = FastCar()fastCar.window = 1if xxx != nil{ }//只有在可选值不为空的时候才执行//orif let xxx = 可选变量{ // 可以使用xxx 作为可选型变量的解包值。 // 也就是赋值 给xxx 可以取一样的名字}
不用代码画界面:
导入app的icon、图标
添加控件
添加约束
编辑另一个页面:
编辑基本的控件和约束之后
修改加载页面
添加页面跳转
Cocopods:管理引入的包
去官网下载客户端,使用app来进行操作(太贴心了,不过以往的经验是网络带不动)- 使用官方的app,非常的无脑简单好使。不担心网络(首次下载app可能很慢)
pod init// 创建一个新项目,
在 Podfile文件里面写要导入的包就行
p50 天气api and delegate
获取用户的当前位置:
plist: property list
委托 delegate:
// 实现协议里面这个方法: func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let lat = locations[0].coordinate.latitude let lon = locations[0].coordinate.longitude print(lat,lon) }// 页面出现时调用: override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) locationManager.requestWhenInUseAuthorization()//请求授权当前的位置 locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters//设置位置精度,精度越大,越耗电,耗资源。 locationManager.requestLocation()// 获取位置
AF.request("https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=8f35cb963f3d5396adad5398430612b3").response { response in debugPrint(response) print(response.data) }
最终打印出别人服务器给的回应。
http请求方式(method,get,post,delete)
字典(一种数据类型,key:value)
let dict : [String:Any] = xxx// 请求的参数解析:// 定义参数的类型 struct WeatherParameters: Encodable { let lat: String let lon: String let appid:String }// 使用参数encoded let weatherPatameter = WeatherParameters(lat: "\(lat)", lon:"\(lon)", appid: appid ) AF.request("https://api.openweathermap.org/data/2.5/weather", method: .get, parameters: weatherPatameter, encoder: URLEncodedFormParameterEncoder .default).response { response in debugPrint(response) // 使用SwiftyJSON来转换数据: switch response.result { case .success(let value): let json = JSON(value) let name = json["sdfs"].stringValue//如果为空,取出来是nil,不能print出来? // string得到类型是可选型,但是stringValue出来是一个确定值 print(name) print("JSON: \(json)") case .failure(let error): print(error) } }//正常获取到了数据。
class Weather{ var temp = 0 var condition = 0 var location = " " // 计算出行 var icon :String{ switch (condition) { case 0...300 : return "tstorm1" case 301...500 : return "light_rain" case 501...600 : return "shower3" case 601...700 : return "snow4" case 701...771 : return "fog" case 772...799 : return "tstorm3" case 800 : return "sunny" case 801...804 : return "cloudy2" default : return "dunno" } }}//模型类// 传数据到模型 self.weather.temp = Int(t) self.weather.location = name self.weather.condition = json["weather",0,"id"].intValue print(t) // 改变视图 self.locationLabel.text = name self.TLabel.text = "\(t)˚" self.imageview.image = UIImage(named: "\(self.weather.icon)")
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. if segue.identifier == "searchCity"{ let vc = segue.destination as! SearchCityViewController vc.currentCity = weather.location } }
回到上一个界面:dismiss()
@IBAction func searchWearher(_ sender: Any) { delegate?.didSearchCityBtn(cityName: inputCityTF.text!) dismiss(animated: true, completion: nil) }// 实现接口中的函数: func didSearchCityBtn(cityName: String) { // print(cityName) let patameters = ["q":"\(cityName)","appid":appid] let api = "https://api.openweathermap.org/data/2.5/weather" searchWeacher(api: api, parameters: patameters) }
转载地址:http://rcywi.baihongyu.com/