新普金娱乐网址


天文卿的爱侣围与人家的情人围,差距就是是当下13单终端生

潜水——遇见70%之球|菲律宾好玩的潜水行程都当这哪

“地动仪”真的那么巧吗(读书笔记)

  • 十月 25, 2018
  • 地理
  • 没有评论

序言:闲在小卖部混日子一段时间,就学习Swift,学学iOS8,碰巧遇上这篇文章,一个下午开下发现死轻掌握,就尝试翻译并分享出去。顺便求推荐广州底iOS工作~~~~

30年前插队次,听“形势报告”,说美国航天员在太空飞行时,能顾底球上之人类知识遗迹只有长城及荷兰之围海工程。不久而起消息,说这话是1969年7月生人首涂鸦登月之美国阿波罗11如泣如诉飞船的宇航员阿姆斯特朗说之,但是说话都改成了“从月球上用眼看的人类最充分之最好充分的工程是长城。”当时众多知识青年都觉得不可思议,脸小学生都看这种说法是反其道而行之起码的常识。人会在百米距离外用肉眼看清一如既往完完全全头发呢?如果当时是吹,那所谓用眼睛在太空看长城肯定是瞎话。况且果真在满天中之所以眼看长城,那么相同也克顾人类文明的浩大遗迹,这是无咋样的事实。不管是谁,只要有一些知识知识,能独立思考,判断这种说法的真真假假实在不是一律项难事。

点这里关押原稿
接触这里看 onevcat
大神的课

针对当下之知青而言,讨论这问题发生敏感性。“文革”后,这个说法仍络绎不绝地起于各类文章被,继续沿袭,而且进一步神奇。许多深受了高等教育的主管,文化名人及教师还同样据正经过地为这也条例,证明先人的伟人,我之几各同行,在学童写被各个见之,都如写几句子话纠正,引导学生质疑,然而三人成虎,以勒索传讹,谬误成了真理,最后,谁吧不思量质疑了。

以下正文,说明一下,并无是逐字翻译,同时流程以及情来涂改。

人类在高空与月上确能因此眼睛直接看到长城也?解开这个谜,并无苟深酷的知识以及设备,可是直到日前,才有人出澄清事实,原来宇航员没有说过这样的话。我看当下是中国教育界最僵的事体之一,在将近30年之时空内,他们无发生强有力的正确性的声响。

  • 要看官太累了直看形成结果,可以触这里下载就后底工,存放于dropbox,记得自备VPN。
  • 还要这篇教程是swift
    1.0底下写的,打开项目后会报语法错误,按提示修改就可以。

教师在教学中若同学员同样志探究事理,探究一种状况的成因。不但使因势利导学员质疑,而且只要教会他们勇敢假设,拓宽求证的思绪,在条分缕析面临显现独到的推理,新颖独到的看法,常在对事物的怀疑。曾视这样平等尽管传说,20世纪初,德国的小学课本上说打败拿破仑是德国人口之力量,英国底小学课本则说打败拿破仑完全是英国口之能力,各说每的语句。罗素主持将立即半栽教科书放到一片被小学生读,有人担心这样做儿女等用任所适从,他们信奉谁的啊?罗素说,你让的学习者开始怀疑了,你的傅即打响了。—这里的“怀疑”内涵是“思考”并无平等于“什么呢未相信”而反思中国底教诲,当看到学生一双双眼流露疑惑时,社会是何等的手足无措啊!—高度紧张之“引导教育”,苦口婆心的“思想工作”五花八门的“心理宣泄”都以一个目标:让她们相信我们让他听见望底一切都是正确的;如果他而所疑,那是世界观有问题…..


咱俩的教育就是是这般成功之哺育出一代代缺乏独立思考的力的“知识分子”。

Step 0:

每当iOS
8遭到,苹果商店出产的应用程序扩展Extension技术,可以吃您的APP扩展原有职能到另外界面(通知栏,分享拦),或为不同APP间能够进行数量交互,同时不见面相差时页面。
iOS 8系统发生6个支持扩大的网区域,分别是Today、Share、Action、Photo
Editing、Storage Provider、Custom
keyboard。支持扩大的系区域为吃称呼扩展点。
脚是以IOS的延伸点的列表:

  • Today –
    对于赛事比分,股票、天气、快递这仿佛需要实时落同时又简约的信,可以在通告中心的Today视图中创造一个Today扩展实现。Today扩展又称作Widget。

  • Share –
    在网的分享拦中创建于定义分享,可以大饱眼福内容,分享网站还是发布消息。

  • Action –
    action在有支持之壮大点被扩展性最强的一个。它可实现转移另一个app上下文中的始末。苹果在WWDC大会上演示了一个Bing翻译动作扩展,它可拿当Safari中当选的文本翻译成不同之言语。

  • Photo Editing – 于iOS
    8之前,如果您想呢公的照片添加一个异常的滤镜,你用上第三方app中,这个历程是一对一麻烦的。在iOS
    8遭到,你可以一直在Photos中使用第三方app,如Instagram,VSCO
    cam、Aviary提供的Photo
    Editing扩展完成对图片的编撰,而任由需去时之app。

  • Document Provider – 也吃Storage
    Provider,可以叫超过多个公文存储服务中间的管住变得更简单。类似Dropbox、Google
    Drive等储存提供商经以iOS 8中提供一个Storage
    Provider扩展,app直接可以采用这些扩展检索和储存文件要不再要创造不必要之正片。

  • Custom Keyboard – 自定义键盘输入法可以为用户以一切体系范围外使用。

如若立篇稿子,将集中授课 Today Extention 部分。

图片 1

40几近年前读常识课本时,对张衡的“地动仪”产生猜疑,我以为只要地震震感传到洛阳,“地动仪”上之八长达龙含着的铜丸都出或丢掉下来,未必会灵活到“虽一致上发机,而七首不动”这个猜测虽屡被痛击,却直接格外执拗。我认为在对高度发达的今天回复这样同样种仪器是易的转业,何以无人去实践也?我视野所和,好像没公开地阐述对地动仪的真伪质疑。可是我作为导师,每令及《后汉书。张衡传》时,都见面提出这样的疑问,我其实不信赖“地动仪”能出那么的灵敏度。我吧请教过一些大体师资与地理教员,他们吧无能为力拿“地动仪”的恐怕原理令人信服的说明白。现代科技完全由能力研究恢复或论证有记载的机械发明,何以连并无复杂的“地动仪”也恢复不了,而忍心让这体现中华灿烂文明的实用之东西“失传”呢?那个被传的神奇的“木牛流马”在多年研究后非是有矣不利的结论了呢?令人伤感的是对准这么的题目,起先还有学生有趣味去探索,随着应试教育之蓬勃发展,这仿佛质疑甚至越来越不合时宜了,学生更相信书而漠然置之探索以及发现,《张衡传》收入教材多年了,我非晓得许多的民办教师是怎么样讲解“地动仪”的。我哉未清楚为什么千百万学童额米有提出好的疑问,当读到“验之以事,合契若神”时,他们实在相信啊?

Extention是怎么工作之?

于咱们开始动Today
Extensions之前,先让咱看看Extensions的片定义,以便了解之后的教程。

  • 率先,Extensions不是单独的应用程序。Extensions必须依让一个host
    app,下面一律为作宿主APP,同时他们的生命周期相互独立,并且可以相互接触事件。一个宿主APP可以涵盖多独Extensions。

  • 当一个Extensions运行的时候,宿主APP不见面又运转。每个Extensions都发和好之独门进程(相当给一个不怎么的APP)。同时,可以基本上只Extensions同时运行,相互间不受影响。每次运行Extensions都是再度开动之(重复的使用相同Extensions并无见面使同样块内存)。

  • Extensions与宿主APP间不克一直通讯,但得品尝通过OpenURL()来开辟宿主APP或以NSUserDefaults存储和朗诵博通用的多寡。

新近错过云南“支使得讲学”在宣读到革命上道时自己推了“地动仪”的例证,说了自的多疑,以此为证,主张探究式的教学,当见到满场狐疑的眼力时,我而忆起了罗素的语。我怀念,这等同猜测是时左,并无重大,如果教师不乐意教学生探究与意识,学生没质疑思考的天资,全社会可年复一年地放空炮“诺贝尔奖”那才给丁待哭无泪呢!

The Today Extension

哼了,现在我们准备开创一个widget,为了节约不必要之头准备,
这里可下载至原有状态的工程,记得使用VPN和改swift
1.2 导致的语法错误。
以此老工程是一个简单易行的天数据显示下,so……它是需要互联网连接和一个天数据获得的API。
若是我们的天数据将起
forecast.io夫网站取得,它提供每日1000长达免费查询,所以在初步勾画代码前,最好先夺登记并将到属您的API
key。
Oh,还有还有,要博取天气就需要所在城市的地理位置信息,所以我们尚待而CoreLocation来获得地理信息。(原文略过了就步,并提供了一个教程
,但因为极度简单用我于这里就是增长了 (.) )

朗诵后谢:最近以羁押《天骄之殇》,涉及到钱学森的百年的问,为何我们培训不出超级的美貌。问题常常充分醒目的。我们的教导受几近是匪提倡质疑之,这点由咱的考书中及国外的区别是深之赫的。我们讲课的还是相对“僵死”的知识,而别人都是雅灵敏的,可以散开的学问。就应声点多多环抱内的人都是蛮明亮的。在及时本开被,提到了事先几十年做得“少年科大班”十分风行时,也是对钱博士的建议一旦使用的等同种植非常的选,但是执行是查真理的绝世标准,还是没出像人们想象中的美貌,一半一半,也是千篇一律种急功近利之做法,缺乏人文关怀,没有商量培训的就学,同样也塑造非发卓越人才的。而且针对人之心理健康是巨的重伤。

Step 1:

全套准备好后,大家运行工程后当会见到底的界面:

图片 2

是就是是宿主APP现在之状态了,城市名跟坐标写死了 (=.=)。
下一场,开始率先步咯!

从来不同栽自由之氛围及条件,是成长不发生健康的树木的。后来人们想出埃及底金字塔是发出自由之建筑工人修建的,而未是所谓的奴隶,因为人在平等栽禁锢和按的气氛被凡是力不从心表达出创新意识的,也无能为力精细的夺好同样起巨大的工的。反观我们的长城,我时之理念是没呀值得骄傲之,春秋战国几百年,短命的秦王朝,长城止是作同样种乱手段之特别的应急的方式
,耗费了大量的人力物力,是反复的白骨累积起来的。有什么值得去伸张?还来那么幼稚的伪的扬,人类的十不行奇迹……
真是千篇一律栽愚昧的“耻辱”啊!我想起一句子小品的词儿:说而尽而就算尽很啊行,说坏就不行行也够呛。看来我们的微东西验证的正规化未是因对为线的,而是因某些目的吧以的,真是有硌尴尬,但是诚特别俨然的!

Embedded Frameworks and Code Reuse 嵌入式框架和代码用

Extensions
的生命周期是独立为宿主APP的,同时Extensions的效应应是宿主的一部分功能的延,Extensions与宿主应有相同之意义有,即她以见面使相似甚至同之代码和逻辑。
因此,制作Extensions的首先步,就是把通用的代码块放到一个宿主APP与Extensions都能“拿到”的地方。
iOS 8的自制Framwork就好帮忙到您!

以下是手续:

  1. 于Project
    Navigator中,点击project,然后于起的面板左下方点击”+”按钮(或选择Editor,然后AddTarget)。
![](https://upload-images.jianshu.io/upload_images/6775-d0667493f8973805.png)

这里是已经完成了状态
  1. 每当开拓的面板中,选择 iOS > Framework & Library > Cocoa Touch
    Framework,然后您见面视:
![](http://www.appcoda.com/wp-content/uploads/2014/10/weather_data_kit.png)
App Extension - Weather Data Kit



名字叫 WeatherDataKit 不要搞错了,其他按项目填,然后点一下 Finish。

好地方的手续后,你晤面发现多单一个让WeatherDataKit的folder和target。展开WeatherDataKit,会看就来一个
WeatherDataKit.h 在那里,这个 .h 文件的凡当公的种还要采用 Obj-C 和
Swift
的时候使用的,作用是桥接Obj-C的腔文件,当然这类型里不要做任何操作。

每当此处大家如果专注,Extension并无是能统统支持所有Cocoa Touch
APIs的,比如下面的几乎沾:

  • 语音输入和摄像头调用
  • 于AirDrop接收数据(但能够发送数据)
  • 常驻后台(Extensions的可用内存是雅没有的,同时系统内存紧张之时节呢首先拿Extensions开刀)
  • 不能够利用外带有 NS_EXTENSION_UNAVAILABLE 或近乎宏定义 的接近, 或
    EventKit 和 HealthKit 这种无支持Extensions的 framework
  • Access a sharedApplication object, and so cannot use any of the
    methods on that object(不懂得这句)

现今咱们编译的时段要下上述的API将见面碰到有些警戒,可以经过勾选”Allow
app extension API
only”来就算得避这些警告。(这里发出个列表可以参见哪些不能够因此在Extension上)

图片 3

记勾上

哼了,接下去要举行的那个粗略,把本在 Weather folder 中之 “Weather Data”
移动到 WeatherDataKit folder
中,记得去改变吃活动文件之target(三单还如)。

图片 4

App Extension – Weather Group

图片 5

即使是这里

地动仪,印象中杀已经有人提出了怀疑的,同样的凡由于民族之“自豪感”,需要这么的扬作用,管他真假也~

Extra Part!

还记上面提过,要拿走天气信息,首先要取得到地理位置信息。原科目是为此固定坐标的,这里呢,我们即便自己写一个。
要么当 WeatherDataKit folder,新建一个深受 WeatherLocation 的 swift
文件。然后,在 WeatherDataKit 的 target 里补充加 CoreLocation framework。

图片 6

丰富必要之 framework

尔后便可以形容代码啦:

  1. 当 WeatherLocation.swift 里,声明 WeatherLocation 的 class,它延续与
    NSObject,并且会发 CoreLocation 的 delegate(记得先 import
    CoreLocation)。
  2. 接下来声明 CLLocationManager 对象
    ‘manager’,它可扶持我们一定又得到到祥的地理信息。
  3. 随着补及 CLLocationManagerDelegate 的方式:

  4. locationManager(manager: CLLocationManager!, didUpdateLocations
    locations: [AnyObject]!)

  5. locationManager(manager: CLLocationManager!, didFailWithError error:
    NSError!)
    它一个担负更新当前之地理位置信息,一个承担告诉你出错的情。

  6. 最终当 init() 方法里吃 manager 启动。(记得上及 manager 的安装及点名
    delegate 对象)

发生那粗略也?
自然没有。Apple对于用户之苦衷非常重视,像地理位置这种时刻出卖你的信,当然要博得用户许可才能够用!
那我们先行返 Weather 这个target,找到 info 面板(或者以 Weather folder
下找到 info.plist)。
接下来上加点儿只价:(在iOS 7
或事先才需要一个,如果用支持原本本子则用开系统版本判断来做不同处理)

  • NSLocationAlwaysUsageDescription
  • NSLocationWhenInUseUsageDescription
    图片 7
    以 info.plist 为例
类型记得要为 String
,内容根据自己需要填。补充完这两项后,当项目启动并在第一次使用地理位置信息的时候,系统就会自动弹出
Alert 要求获取授权,这是上面你填的信息就会显示在这个 Alert
里。(关于这两个 String
的使用场景,可以参考[Develop](https://link.jianshu.com?t=https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html))

哼了,接下贴一下代码:

import Foundation
import CoreLocation

class WeatherLocation : NSObject, CLLocationManagerDelegate {

typealias WeatherLocationCompletionBlock = (latLong: String?, cityName: String?, error: NSError?) -> ()

let manager = CLLocationManager()
var latAndLong : String?
var city : String?
var block : WeatherLocationCompletionBlock?

class var sharedInstance: WeatherLocation {
    struct Singleton {
        static let instance = WeatherLocation()
    }
    return Singleton.instance
}

override init() {

    super.init()

    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.requestAlwaysAuthorization()
}

 // MARK: 看这里看这里
func updateLocation(completion: WeatherLocationCompletionBlock) {
    if CLLocationManager.locationServicesEnabled() {
        manager.startUpdatingLocation()
        block = completion
    }
}

// MARK: CoreLocation
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

    manager.stopUpdatingLocation()

    var location:CLLocation = locations[0] as! CLLocation
    latAndLong = "\(location.coordinate.latitude),\(location.coordinate.longitude)"

    CLGeocoder().reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in
        if (error != nil) {
            self.block!(latLong: "", cityName: "", error: error)
            println("Reverse geocoder failed with error" + error.localizedDescription)
        } else {
            if placemarks.count > 0 {
                let pm:CLPlacemark = placemarks[0] as! CLPlacemark
                if (pm.locality != nil) {
                    self.city = pm.locality
                    self.block!(latLong: self.latAndLong, cityName: self.city, error: nil)
                }
            } else {
                var otherError : NSError?
                otherError = NSError(domain: "Problem with the data received from geocoder", code: -9999, userInfo: nil)
                self.block!(latLong: "", cityName: "", error: otherError)
                println("Problem with the data received from geocoder")
            }
        }
    })
}

    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
        println("\(error)")
    }
}

吓了,大家该发现,除了以地方列有要要兑现之艺术以及目标之外,我还增补加了一个新的方式
updateLocation(completion:blockName) 和一个 block
,它的作用是查询地理位置又经过 block 的形式返回结果于调用者。
亟待小心的是 updateLocation
方法并无兢兢业业,它并没有处理结果的状态返回给调用者,这当实际开发被以会碰到题目(比如您切莫能够管用户机器会每次都询问到结果)。

然后,在 WeatherDataViewController.swift 文件被补充加一个智

func loadLocation(completionLocdLocation:(city: NSString?)->()) {
    WeatherLocation.sharedInstance.updateLocation { (latLong, cityName, error) -> () in
        weak var weakSelf = self as WeatherDataViewController
    WeatherLocation.sharedInstance.updateLocation { (latLong, cityName, error) -> () in
        WeatherService.sharedInstance.fetchWeatherData(latLong!, completion: { (data, error) -> () in
            dispatch_async(dispatch_get_main_queue()) {
                weakSelf?.weatherData = data
                weakSelf?.updateData()
                completionLocdLocation(city: cityName)
            }
        })
    }
}

loadLocation
方法里第一查询地理位置,得到结果后查询天气信息,得到气象详情后更新数据并把目前城市名称返回给调用者,因为嵌套了
block 的关联,记得使用 weak 来吧 self 变成弱引用,避免 retain cycle
问题。

最终,我们于 ViewController.swift 里测试一下,import WeatherDataKit
(WeatherDataViewController 的 target 改变了,需要从表面引入,记得加上
framework),在 viewDidAppear 方法里长:

weak var weakSelf = self
loadLocation { (city) -> () in
        weakSelf?.locationLabel.text = city as? String
}

运转,等 API 返回结果,UI
更新!(如果模拟器上面世谬误,记得调整模拟器地理位置的选料项,或者指定一个地理位置)

图片 8

呵呵呵呵

倘若自科学的维度来讲,当然是当心的,即便是我们现明白的所谓的这么那样的驳斥及不利规律,都全产生或于未来某时刻给推翻的。我们人类的体会时或处于一个个别范围外之,一切都是相对真理!所以我们来必要有嫌疑精神,来当一些问题。

Step 2:

Creating the Widget

支柱登场~~~继续增长 target,然后命名吧 Weather Widget 。

图片 9

不怕是以此

缔造好后,我们见面发觉大多了一个 Weather Widget 的 floder 和多矣一个
Scheme:

图片 10

连logo都不同

本咱们来瞧一个初创办的 Today widget 会时有发生什么事物:

  • TodayViewController.swift
  • MainInterface.storyboard

以及平常的 ViewController 没什区别嘛~~~~但其实 TodayViewController
里已经补充加了 NCWidgetProviding 这个
protocol,乖乖的比如需要上了便好。还有久违的 didReceiveMemoryWarning
方法,看来 widget 是独时刻惨死的指令,大家想做的花俏的讲话记得做懒加载与在
didReceiveMemoryWarning 里举行释放,不然因为 widget 体验不好就是管 APP
删掉就得不尝试了。

尝试运行一下,弹出来的面板直接选 Today 就得了,然后会看底的成效:

图片 11

它们已帮助你写好 Hello World 了

盖 Extension 和 宿主APP 都亟需以同样的代码,所以它们一律要上加
framework:

图片 12

App Extension – 添加 Framework

补加了晚就是足以当 TodayViewController 里继承的 ViewController 改吧
WeatherDataViewController ,这样就是得采取 WeatherDataViewController
的点子了。
连着下,我们若修改 MainInterface.storyboard 里的UI,使 widget
看到的信息可知同 宿主APP 的均等。

图片 13

把原的 Hello World 界面改化这么

根据 Apple Extensions
Guide
的建议,widget最好是于小之,对于详细信息要发出只可适配的可观去展示或隐蔽。
用灰色字体的局部会根据用户的待来展示会隐藏,这有些于 stroyboard
里为一个透明的 view 所蕴藏,我们拿它们定义也 MoreDetailsContainer
,等下会因此到。
然后回来 TodayViewController ……

非正常,漏了平等步,我们在延续写代码前,需要对 storyboard 或 xib 里之 UI
做适配。我们是项目仅仅支持 iOS 8,所以可以放心的运用 AutoLayout 跟
SizeClass。

  1. 接触开 MainInterface.storyboard ,点击
    MoreDetailsContainer,我们用其维持一定的惊人并且连接以脚的职位,我们得以这么设置:
![](https://upload-images.jianshu.io/upload_images/6775-f5bedeace434ac47.png)

点点这里



![](http://www.appcoda.com/wp-content/uploads/2014/10/container_view_constraints.png)
注意不要勾选 Contrain to margins
  1. 选择 Cupertino, CA
![](http://www.appcoda.com/wp-content/uploads/2014/10/cupertino_constraints.png)
改成这样
  1. 选择 100
![](http://www.appcoda.com/wp-content/uploads/2014/10/temperature_constraint.png)
改成这样
  1. 摘小箭头按钮
![](http://www.appcoda.com/wp-content/uploads/2014/10/caret_constraints.png)
改成这样
  1. 于 Mostly Cloudy 这种不确定长度的
    label,我们得给它自动根据仿改变长度,同时假设同 Summy 对共同。
    右键按停 Summy ,然后拖动到 Mostly Cloudy,选择 Horizontal Spacing。
![](http://www.appcoda.com/wp-content/uploads/2014/10/modify_option_a.png)
这样配置



或者在 Mostly Coudy 的 constraint 面板中,找到 Leading Space to
SUMMARY 的 contraint ,修改为 20。



![](http://www.appcoda.com/wp-content/uploads/2014/10/modify_option_b.png)
modify\_option\_b
  1. 别部分参考第5步。

吓,运行一下。

图片 14

当下是假数据

或你见面发觉左会时有发生同等截空白空间,我们可据此脚的代码把其填满:

func widgetMarginInsetsForProposedMarginInsets
    (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
    return UIEdgeInsetsZero
}

实际效果好试试看。

紧接着我们要实例化 UI 上面的要素:

  1. 回到 TodayViewController,添加一个按钮和按钮方法:
    @IBOutlet weak var showMoreButton: UIButton!
    @IBAction func showMore(sender: UIButton) {
    }
  2. 添加一个可变的 contraint:
    @IBOutlet weak var moreDetailsContainerHeightConstraint :
    NSLayoutConstraint!
  3. 最终定义一个 BOOL 变量,标记 moreDetailsContainer 是否出示:
    var widgetExpanded = false

概念了后,开始勾画相关逻辑:

  1. Widget 初始化的时候是没有数的,所以一律开始 moreDetailsContainer
    应该是东躲西藏的状态:
    moreDetailsContainerHeightConstraint.constant = 0

  2. 以 showMore 方法里上加代码:
    @IBAction func showMore(sender: UIButton) {
    if widgetExpanded {
    moreDetailsContainerHeightConstraint.constant = 0
    showMoreButton.transform = CGAffineTransformMakeRotation(0)
    widgetExpanded = false
    } else {
    moreDetailsContainerHeightConstraint.constant = 220
    showMoreButton.transform =
    CGAffineTransformMakeRotation(CGFloat(180.0 * M_PI/180.0))
    widgetExpanded = true
    }
    }
    记忆在 sotryboar 里把有些箭头按钮跟代码连接起来。

  3. 说到底当 ViewDidLoad 方法里长:
    temperatureLabel.text = “–“
    summaryLabel.text = “–“
    timeLabel.text = “–“
    humidityLabel.text = “–“
    precipitationLabel.text = “–“

     loadLocation { (city) -> () in
         self.locationLabel.text = city as? String
     }
    

这般widget启动的下即便见面自动获取信息。

运行吧!

图片 15

包涵这个箭头

后续

第一次翻译还有写教程呢(基本上就在胡说了),没悟出如果考虑的东西要挺多的。
立即首教程最后还有跟 宿主APP 通过 UserDefault
来开展数量交互的一部分,不过其还是用写死的数码,这里虽不布置了,看看后续能无克丰富又实用的法子来做。

非常感谢能来看最后。

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图