用swift 3.0语言swift编写天气预报一个 按 1,3,5,7,9的三角形星号图案?

swift3.0和Objective-C的交互需要注意这些
投稿文章,作者:ZeroJ(Gitbub)前言:Swift3.0出来后, 可以看到改变很大, 和cocoa, Foundation...的交互也变得更方便了, 同时Swift编写的应用适配到iOS 7, 所以, 我们可以相信: 在未来使用swift的情况会逐渐增加了, 同时会涉及到OC和Swift在项目中并存的情况, 这里我重新读了官方的&#39;Using swift with Cocoa and Objective-C(swift3)&#39;的文档, 记录了一些个人觉得比较常用的笔记, 请大家选择性阅读(里面的代码 均来自文档)OC的初始化方法在Swift中被引为&init(...)&---&如果初始化不会失败&init?(...)&---&如果初始化可能失败&init!(...)&---&否则oc中的property里的(getter==, setter==)将会被swift忽略id对应Anyobject 但是所有的Anyobject在swift中是可选值, 如果之前的值为可选值, 在被设置为Anyobject后就是多重可选值了oc中的属性被标记为nullable&->&在swift中相当于&?nonnull&->&在swift中相当于&非可选属性未标记&->&在swift中相当于&!oc中的轻量级泛型也是对应与swift中的泛型@property&NSArray&*dates对应于&&var&dates:&[Date]swift 中的闭包默认捕获变量的方式相当于 oc中block中捕获被标记为 __block的变量方式 -> 就是说 闭包捕获到的是变量的指针swift中只要不是在多线程中, 建议使用[unowned self]来避免循环引用, 多线程中, 建议使用[weak self]== 操作符相当于oc中的isEqual: --- 即比较内容是否相等;=== 相当于oc中的指针比较继承自NSObject的子类如果重写了isEquals:方法, 应当提供 hash 这个属性不能在oc中继承swift的class如果在swift中遇到oc中不支持的命名 可以利用 @objc(name)为他(属性 枚举, 方法名...)名个别名@nonobjc 用来标记oc中不支持的dynamic 将属性或者方法标记为dynamic就是告诉编译器把它当作oc里的属性或方法来使用(runtime),当需要使用 KVO 或者 runtime的时候需要这样处理当使用oc的 perform(selector, with:)方法的时候会返回一个可选值(指向AnyObject的指针);但是使用perform(:on:with:waitUntilDone:modes:) and perform(:with:afterDelay:)不会返回可选值使用 #keyPath() 可以转换为string, #keyPath(class.property) == "property"可用于KVC 例如person.value(forKey: #keyPath(Person.name)) = person.name但是测试了下不能修改swift中的只读属性 不知道有什么方便的用处NSClassFromString("MyFramework.MyClass")@IBDesignable 用在class(UIView的子类)声明的前面, 然后就可以在storyBoard中的inspector编辑它;@IBInspectable 用在(UIView的子类)的属性前面, 然后就可以在storyBoard中的inspector编辑它 ,就想系统提供的可以设置颜色,字体...swift中的属性默认是strong类型, 只有可选类型才能被标记为weakoc中的 copy属性 转换为swift中的@NSCopying 必须遵守NSCoding协议使用Core Data的时候所有的属性和方法需要标记为 @NSManaged文档中指出"The corresponding reference types can be accessed with their original NS class name prefix."但是beta版本中不能很好的使用NS开头的在oc和swift的桥接类型之间 直接使用 as 可以相互转换因为swift中的String和NSString使用的编码方式不一样,所以在swift中要对string使用索引的时候 不能直接使用 Int 或者NSRange需要使用String.Index and Rangeswift会将Double, Int, Bool, Uint, Float和NSNumber桥接, 所以可以直接将这些类型的值使用 as NSNumber转换为NSNumber, 但是逆向进行是得到的可选值 as?Foundation 和Core Foundation 之间的类型有toll-free bridge(&#39;免费桥&#39;)Foundation中的常量, 在swift中被换为类嵌套的枚举:NSJSONReadingOptions ----- >> JSONSerialization.ReadingOptionswift中使用 Core Foundation如果使用swift处理过的函数不用我们手动管理内存分配;否则需要我们处理区分的方式: 当返回值是 Unmanaged的时候说明需要我们处理处理方法: 在使用返回的值之前调用他对应的takeUnretainedValue() 或takeRetainedValue()即可例如let memoryManagedResult = StringByAddingTwoStrings(str1, str2).takeUnretainedValue()swift中Core Foundation里的类型 Ref后缀被去掉了 例如 CFTypeRef -> CFType在oc的方法 使用 NS_SWIFT_NOTHROW , 将不会使用swift的异常抛出机制swift中直接使用 is 来实现oc中isKindOfClass: 的功能swift中使用kvo的条件: 1.必须继承自NSObject 2. 被观察的属性 要被标记为 dynamicswift 中的单例很简单:class&Singleton&{&&static&let&sharedInstance&=&Singleton()}或者class&Singleton&{&&static&let&sharedInstance:&Singleton&=&{&&&&&&let&instance&=&Singleton()&&&&&&//&setup&code&&&&&&return&instance&&}()}swift和C的交互: c的函数在swift中均为全局函数使用CF_SWIFT_NAME 这个宏可以将c中的属性或者函数转换为swift中eg:Color&ColorCreateWithCMYK(float&c,&float&m,&float&y,&float&k)&CF_SWIFT_NAME(Color.init(c:m:y:k:));对应为swift中extension&Color&{&&init(c:&Float,&m:&Float,&y:&Float,&k:&Float)}c语言中的枚举 如果使用了NS_ENUM定义, 则在swift中被处理为对应的枚举如果没有使用NS_ENUM定义, 则被处理为结构体typedef&NS_ENUM(NSInteger,&UITableViewCellStyle)&{&UITableViewCellStyleDefault,&UITableViewCellStyleValue1,&UITableViewCellStyleValue2,&UITableViewCellStyleSubtitle};//对应与enum&UITableViewCellStyle:&Int&{&&case&`default`&&case&value1&&case&value2&&case&subtitle}typedef&enum&{&MessageDispositionUnread&=&0,&MessageDispositionRead&=&1,&MessageDispositionDeleted&=&-1,}&MessageD对应与struct&MessageDisposition:&RawRepresentable,&Equatable&{}var&MessageDispositionUnread:&MessageDisposition&{&get&}var&MessageDispositionRead:&MessageDisposition&{&get&}var&MessageDispositionDeleted:&MessageDisposition&{&get&}c中的被NS_OPTIONS修饰的枚举, 在swift中是OptionSet类型, -> 即可以使用数组方式选多个值typedef&NS_OPTIONS(NSUInteger,&UIViewAutoresizing)&{&&&&&&UIViewAutoresizingNone&&&&&&&&&&&&&&&&&=&0,&&&&&&UIViewAutoresizingFlexibleLeftMargin&&&=&1&<<&0,&&&&&&UIViewAutoresizingFlexibleWidth&&&&&&&&=&1&<<&1,&&&&&&UIViewAutoresizingFlexibleRightMargin&&=&1&<<&2,&&&&&&UIViewAutoresizingFlexibleTopMargin&&&&=&1&<<&3,&&&&&&UIViewAutoresizingFlexibleHeight&&&&&&&=&1&<<&4,&&&&&&UIViewAutoresizingFlexibleBottomMargin&=&1&<<&5};对应与public&struct&UIViewAutoresizing&:&OptionSet&{&&public&init(rawValue:&UInt)&&public&static&var&flexibleLeftMargin:&UIViewAutoresizing&{&get&}&&public&static&var&flexibleWidth:&UIViewAutoresizing&{&get&}&&public&static&var&flexibleRightMargin:&UIViewAutoresizing&{&get&}&&public&static&var&flexibleTopMargin:&UIViewAutoresizing&{&get&}&&public&static&var&flexibleHeight:&UIViewAutoresizing&{&get&}&&public&static&var&flexibleBottomMargin:&UIViewAutoresizing&{&get&}}在swift中直接使用 &let resize = [. flexibleLeftMargin, . flexibleWidth...]在swift中全局变量和存储属性都被保证只初始化一次,所以用来当作OC里面的#define定义的常量。同时swift全局函数可以当作OC里#define定义的复杂宏(类似函数)swift中的条件编译 自定义编译符的方法(例如: DEBUG_LOGGING)首先在project 的设置里面设置swift -D DEBUG_LOGGING to set the DEBUG_LOGGING然后使用 #if DEBUG_LOGGING // 操作 #endif#if&arch(arm)&||&arch(arm64)#if&swift(>=3.0)print("Using&Swift&3&ARM&code")#elseprint("Using&Swift&2.2&ARM&code")#endif#elseif&arch(x86_64)print("Using&64-bit&x86&code.)#elseprint("Using&general&code.")#endifswift中使用指针的方式使用inout方式 &变量使用UnsafePointer或者UnsafeMutablePointer例如这个函数接受的参数可以传许多种let&x:&Float&=&0func&takesAPointer(_&p:&UnsafePointer!)&{//&...}takesAPointer(&x)takesAPointer([0.0,1.0])在swift中申明oc中的包含可选实现方法的协议时需要在协议和方法前都标记objc@objc&public&protocol&MySwiftProtocol&{//&必须实现&&func&requiredMethod()&&@objc&optional&func&optionalMethod()}将oc的方法或者属性使用NS_SWIFT_NAME()可以为他们在swift中命一个别名将oc的方法或使用 NS_SWIFT_UNAVAILABLE()可以让他在swift中不可用
最新教程周点击榜
微信扫一扫中国领先的IT技术网站
51CTO旗下网站
Swift语言那些鲜为人知的特性
Swift语言中存在着各种各样缺乏或没有文档记录的特性等着被开发者使用,尽管鲜为人知但却非常有用,本文作者对其中的一些特性进行了介绍。
作者:Russ Bishop来源:Russ Bishop| 11:12
Swift语言有各种各样缺乏(或没有)文档记录的特性(attribute)放在那里等着被使用。让我们一起看看其中的一些特性:
这个特性为编译器提供了内联提示。有效的取值是__always和never。除非我认为必须要用这两个值,否则就不会使用它(特别是__always)。到目前为止与其相关的规则还不是很明确,在有限的测试下,它可以正常地工作,但还要视具体情况而定。
进 一步的解释:尽管底层虚拟机(Low Level Virtual Machine,
LLVM)有强制内联的概念,但我们目前还不知道这个@inline特性是否与其直接映射,也不知道是否存在大小方面的限制,但这将会导致编译器忽略这一 点而跳过内联。理论上说应该是这样的,但我不保证一定是。
注意(当优化设置关闭时)在调试模式下的构建将忽略@inline。
@transparent
我最初并未将这个特性列出来。该特性会导致编译器在管道(pipeline)中更早地将函数内联。它用于。
甚至在没有优化设置的调试模式下@transparent特性函数就会被内联,所以在调用&1+1&这样的函数的时候并不会特别慢。另外这个特性与@inline(__always)非常类似。
@availability
这个特性可以用来标识某些函数只在某些平台或版本上可用。第一个参数是平台,可以用星号(*)代表一切可用,还可以是iOS或OS X。因为如果需要针对不同的平台,就要指定多个@availability属性。
如 果需要表示该函数在某个给定的平台完全不可用时,可以将第二个参数置为unavailable。此外,还可以用 introduced,deprecated和obsoleted来指定一个或是多个版本的组合:obsoleted意味着该项已经删 除,deprecated仅仅表示如果使用就会给予警告。最后你可以设置message的值,如果该项被使用了就由编译器输出。下面是一些例子:
@availability(*,&unavailable)&func&foo()&{}&&@availability(iOS,&unavailable,&message=&you&can't&call&this&)&func&foo2()&{}&&@availability(OSX,&introduced=10.4,&deprecated=10.6,&obsoleted=10.10)&@availability(iOS,&introduced=5.0,&deprecated=7.0)&func&foo3()&{}&
正如该特性所描述的那样:编译器可以假定这个函数是一个永远循环运行的起点,例如while true { },或者假定是函数abort或者exit进程的情况。
评论者Marco Masser指出,如果调用另一个被标志为@noreturn的函数,那么编译器会忽略掉当前函数中缺失的返回值(missing return values),因为编译器理解程序的控制流。
该属性给出了函数、方法或属性实现的符号名称。如果你已经知道对应的函数参数及其类型,那么就可以直接调用Swift的内部标准库函数,甚至不用头文件,也可以方便地调用C语言编写的函数:
@asmname(&function&)&func&f()&
@unsafe_no_objc_tagged_pointer
上面这个仍然是个谜,但我猜测它是在告诉Swift与Objective-C联系的时候不要使用tagged pointer。
@semantics
这又是另一个谜。参数看起来像是array.mutate_unknown或array.init这样的字符串数组。想必这是要告诉编译器(或静态分析器)函数是如何工作的。
谁还需要乏味老套的@objc和@autoclosure呢?还是算了吧!
文章来源:
作者简介:Russ Bishop 全能型程序员,使用C#、Objective-C和Swift语言编程,开发了奇特的应用Storm Sim Free,博客:。
译者简介:白云鹏,移动应用开发者,个人博客:。【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点热点热点热点
24H热文一周话题本月最赞
讲师:5人学习过
讲师:29人学习过
讲师:5人学习过
精选博文论坛热帖下载排行
本书对第1版的某些章节作了合理的调整,增加了部分实用的程序,并在每一章的最后加了适量的练习题,以巩固前面所学的知识,更加有利于等级考试...
订阅51CTO邮刊2174人阅读
编程语言c++(14)
虽说看起来这个程序很简单。但是在写的过程中还是运到些麻烦。说明学的还是不够扎实啊!!!
对啦,这个程序定义的变量必须是float或double类型。若是int类型就只执行循环体一次,因为之后1/(2*(n-1) &#43; 1)的子就会默认取整数0,0&0.0000001。循环体不执行.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22088次
排名:千里之外
原创:21篇
(1)(6)(2)(8)(2)(2)Swift Weather APP
分享即可 +1积分
本课程将带领大家使用Swift语言开发一个完整的天气 iOS APP。同时大家能够学习到Interface Builder、CocoaPods、Core Location、AFNetworking的使用,以及如何通过Swift调用Objective-C组件,如何通过IBOutlets更新View。
第1章 课程概况
第2章 新建Swift APP
第3章 使用Interface Builder快速构建原型
第4章 使用CocoaPods
第5章 使用Core Location
第6章 使用AFNetworking
第7章 通过IBOutlets更新View
第8章 美化我们的APP
内容实用:10.0
简洁易懂:9.1
逻辑清晰:8.7
9位同学参与评价
thanks~JakeLin
林老师的讲课非常清楚,细致。对初学者很实用。 另外林老师能否推出SwiftWeatherApp 3.0 再新版的视频,似乎与第一版的区别很大。
我是看了一段时间的swift语法后来看的...1.5倍速播放, 完美!!!
要是能基于最新的框架做个第二期就好了.我看github上已经是V3.0了.
讲得很好,很实用。
非常专业 不错
Copyright (C)
All Rights Reserved | 京ICP备 号-2

我要回帖

更多关于 swift编写天气预报 的文章

 

随机推荐