- 博客(23)
- 资源 (8)
- 收藏
- 关注
翻译 Swift:Foundation框架中的NS前缀的由来
可能大家对于著名的NS前缀的由来有一些疑问.绝大多数这些NS前缀的类是NeXTSTEP操作系统中Foundation框架里的一部分,而该操作系统是OS X的基础.NeXTSTEP的程序员对它们的类和函数使用NX前缀.这个前缀在NeXT和Sun合作创建OpenStep之后被改为NS,OpenStep是一个面向对象的框架,它用来在其他平台上提供类似于NeXTSTEP的环境.所以,取决于你向谁提出这个问题
2016-07-31 08:45:05 2266 1
原创 Swift中关于任意类型的数组
在Objc中你是不可以把一个非对象类型放入数组的,你必须将其”封箱”,然后再放入数组.在Swift中你可将非对象类型轻松放入数组:let ary = [1,2,3]你可以明确指定元素类型:let ary:[Int] = [1,2,3]不过你不可以在一个数组中包括不同类型的元素,除非你使用AnyObject类型:class Foo{}let ary:[AnyObjec
2016-07-29 14:54:55 3933
翻译 Swift:消除Null值
由于在现代编程语言中这个无所不在的概念,许多程序猿可能倾向于相信null值是一个必须存在的瑕疵,创建一个没有它的编程语言是不可能的.他们可能会惊奇那些许多没有null值活的也很好的语言,这带来的结果就是,null绝不是编程语言中的必要组成部分!比如说函数型的编程语言Haskell就没有null值.作为替代,它使用一个称为Maybe的数据类型去表示未知值.Haskell的Maybe类型是一个代数数据类
2016-07-28 15:35:33 2785
翻译 Swift中的可选协议和方法的历史渊源
@objc protocol Transaction { func commit() -> Bool optional func isComplete() -> Bool }以上协议被标示为@objc属性,使得它兼容Objective-c代码.如果协议拥有可选的协议或属性的话这是必须的,因为Swift要使用Objective-C运行时去检查类所遵守的可选方法是否存在.不幸的是,这
2016-07-25 07:46:28 1431
原创 Swift类型推测在可选调用中的小提示
我们知道Swift中协议里也有对应于Objc中的可选方法或计算属性,当然协议必须以@objc伪指令修饰否则不可以哦.如下示例:@objc protocol Transaction{ fun commit()->Bool optional fun isComplete()->Bool}我们写一个类遵守Transaction协议的类:class DBTransaction:Transa
2016-07-24 10:47:40 1024
原创 Swift按照数组元素出现的次数及大小排序
要求如下:1、已知一个数组,按照单个元素在数组中出现的次数作为重新排序的依据,个数多的排在前面2、相同个数时候,元素值大的排前面例子:[1, 2, 2, 3, 5, 5]经过计算得到的结果是:[5, 5, 2, 2, 3, 1]一种解决方法是:import UIKitextension Sequence where Iterator.Element == Int{ private fu
2016-07-21 12:05:37 3290 2
原创 Swift3中如何为Array写一个限定Type的扩展
我们知道Swift可以扩展已存在的类或结构,这些类或结构可以存在于标准库(或称为核心库)中.如果结构是一个集合类型(比如Array)就更有趣了.我们想尝试写一个限定Type数组的扩展,So我们就拿Array为例吧.本猫想是不是可以这么写:extension Array{ //....}不过显然不可以 :[翻看了一下Apple官方的Swift编程语言,一无所获.于是上网溜了
2016-07-21 09:25:14 3592
翻译 Thread Pools
许多程序会动态创建数十个设置上百个线程.举个例子,一个web服务器可能在每一个新到来的请求时创建一个新线程,然后在请求完成后将其终止.然而,创建一个新线程将会带来一定的耗费:它需要在内核中创建自身必要的数据结构(并且最终销毁),它需要一定时间来设置这些数据结构.虽然内核对于创建一个新线程已经非常有效率了,但是那些需要创建成百上千线程的程序来说,这依然是性能的瓶颈所在.线程池是被设计用来
2016-07-20 18:16:11 2302
原创 Swift3的playground中对UI直接测试支持的改变
我们知道在Xcode的playground中不仅可以测试console代码,还可以测试UI代码,甚至我们可以测试SpriteKit中的场景,有兴趣的童鞋可以看我之前写的这一篇blog:Xcode的playground中对于SpriteKit物理对象的更新为何无效而在本篇中我们只是简单聊一聊最新的Xcode8.0 beta2(以下简称Xcode8b2)中playground对UIKit支持有了哪些改变
2016-07-19 18:08:16 4767
翻译 KVO and Swift
不像Objective-c中的类,Swift类对于KVO并没有原生的支持,不过你可以在类型安全的前提下使用属性观察者轻松的完成相同的目标.不管如何,从NSObject类派生出的类是支持KVO的,如果你想在不使用属性观察者的情况下使用KVO,你只要从NSObject类中继承你的类.不幸的是,即使从NSObject类派生,KVO也不是自动开启的,你希望用KVO观察的属性必须用dynamic关键
2016-07-18 09:55:25 2008
原创 MacOS和iOS开发中异步调用与多线程的区别
很多童鞋可能对Apple开发中的异步调用和多线程的区别不是太清楚,这里本猫将用一些简单的示例来展示一下它们到底直观上有神马不同.首先异步调用可以在同一个线程中,也可以在多个不同的线程中.每个线程都有一个run loop,主线程的运行环称为main run loop,所有和UI界面有关的操作必须在主运行环中完成.在run loop中线程将会轮询消息源发出的消息.比如在MacOS中鼠标就是一个消息
2016-07-18 08:58:25 2469 1
翻译 Xcode Organizational Identifiers
操作系统(不管是iOS或是OS X)使用bundle标识去唯一标识你的应用.Bundle标识由一个组织id和你App的名字组成.一般的,组织id是你域名的反转.如果你的域名是example.com那么你的组织id将会是com.example,并且你的MyApp的bundle标识将会是com.example.MyApp.为毛是域名的反转呢?这是因为在Java世界中反转域名是一种很流行的避免包
2016-07-17 07:59:18 3166
翻译 Swift:Minimizing Annotation with Type Inference
许多程序猿更喜欢比如Python和Javascript这样的动态语言,因为这些语言并不要求程序猿为每个变量声明和管理它们的类型.在大多数动态类型的语言里,变量可以是任何类型,而类型声明是可选的或者根本不允许.Objective-C采用了混合的处理方式:它需要类型声明,但是任何指向一个Objective-C类实例的变量(包括任何从NSObject派生出的类,但不能是所谓的原始类型,比如int
2016-07-16 10:26:55 1537
翻译 Objective-C Init Method
初始化器在其他面向对象的语言中(比如Java)指的是构造器.Objective-C同样拥有对象构造器在init形式的方法中.不管如何,在Objc中这些方法没有什么特殊的行为.按照惯例,程序猿在init方法中设置对象初始的状态,但是实际上它们和其他的Objc方法一样.因为它们像任何其他的Objc方法,程序猿必须从init方法显示返回已初始化的对象.特别的,这些方法只是简单的返回它们的接收
2016-07-15 08:59:32 1853
原创 Swift中的"可溢出"算术运算符
大家知道Swift中拥有和C,Objc类似的算术运算符,它们分别是:+ - * / %但是你可能不知道这些Swift中的运算符和C,Objc语言中的有一个很大的不同之处,就是它们不可以被”溢出”,无论是上溢还是下溢!在C之类的较低级语言中,如果对可能发生溢出的算术数值做算术运算,结果就会发生所谓的上溢或下溢,比如你对最大的Int32正数加一结果是一个极大的负数:-2147483
2016-07-13 10:29:01 2158
原创 Swift类中如何创建一个对外只读对内可读写的属性
很简单用private修饰符,后面跟限制关键字set:class Day{ private(set) var rawValue:Int = 0 func showRawValue(){ print("raw is \(rawValue)") } func forwardRawValue(){ rawValue += 1
2016-07-12 10:11:41 6110
原创 Cocos2D-ObjC:在RPG游戏中混合Swift代码
我之前写过一个RPG游戏<<熊猫之魂 SoulOfPanda>>编译器使用的是SpriteBuilder,很好很强大!全部代码都由Objc完成,现在想尝试一下在其中混入Swift代码.我的目的很简单,用Swift写一个GCMan9类,派生自Objc中的GameCharacter类,最后在Objc中使用GCMan9这个类.GameCharacter类是游戏人物的基类,我从中派生了十几个子类分别表示游戏
2016-07-09 08:16:07 2522
原创 SceneKit一个3D场景角色的代码重构
SuperSpaceMan3D是一个以SceneKit为基础的小游戏项目,作者展示了用SceneKit开发3D游戏的强大威力.不过在实际运行时会发现有一些小bug,这里我们依次尝试将其修复首先,当spaceman接触到敌人的时候,游戏结束,弹出GameOver视图,然后当玩家再触摸屏幕时,开始新的游戏.在实际游戏中发现,spaceman接触敌人后GameOver视图很快闪过,游戏随即重新开始,不能达
2016-07-08 13:29:26 2476
原创 Swift3中方法可变参数语法的一些改变
我们知道在Swift2中,默认情况下方法的参数是let值,也就是不可改变的.不过我们可以在参数前添加var关键字改变其不变性:func foo(var i:Int){ i += 1 print(i)}不过遗憾的是在Swift2.x+中,已经明确表明方法参数的修饰关键字var将会在Swift3中被移除,所以为了产出这可恶的警告,你必须使用inout关键字,并且在调用方法传递实参时也要
2016-07-04 08:45:51 6283
原创 Swift3中方法可变参数语法的一些改变
我们知道在Swift2中,默认情况下方法的参数是let值,也就是不可改变的.不过我们可以在参数前添加var关键字改变其不变性:func foo(var i:Int){ i += 1 print(i)}不过遗憾的是在Swift2.x+中,已经明确表明方法参数的修饰关键字var将会在Swift3中被移除,所以为了产出这可恶的警告,你必须使用inout关键字,并且在调用方法传递实参时也要
2016-07-04 08:45:23 971
原创 Swift中switch强大的模式匹配
不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬!让本猫带领大家看一下Swift中switch语句模式匹配的威力.所谓模式匹配就是利用一定模式(比如couple)去定制自己需要的匹配结果,比如以下一个3D空间的点坐标:let point3D:(x:Int,y:Int,z:Int) = (1,2,3)我们首先做一些简单的匹配,只是简单的比较是否等于或不等于指定的常量
2016-07-03 13:44:41 4397
原创 SceneKit做一个旋转的地球效果
SceneKit可以用寥寥几行帮你完成很多OpenGL复杂的3D设置代码,下面本猫就带大家完成一个旋转的3D地球的场景.首先需要地球表面图片,将其导入到Xcode中:我们用SceneKit内置的几何球体类创建一个球的实例,并且将地球表面图片应用在球的表面上:let globe = SCNSphere(radius: 15.0)let globeNode = SCNNode(geometry: gl
2016-07-02 21:29:59 7400
原创 Swift中使用NSLog的问题
在Swift中如果想要以如下方式执行NSLog,则编译器必定抱怨:class Foo {}NSLog("%@",Foo())因为Foo是原生Swift类不是继承自NSObject,而NSLog需要其Description方法,所以我们必须使Foo派生自NSObject,然后重载Description方法:class Foo:NSObject { override var descripti
2016-07-01 10:42:21 5987
SwiftUI 超酷炫动画示例大合集
2024-01-08
MacOS 和 iOS 内核 xnu 可编译源代码
2024-01-08
SwiftUI 示例 iFonts 应用完整项目源代码
2024-01-08
SwiftUI 各种界面、自定义视图、动画以及设计哲学示例合集
2024-01-08
SwiftUI 英雄动画(HeroAnimations)演示代码
2024-01-08
iOS 15.4 真机调试支持包(可支持最新的iOS 15.4.1系统)
2022-04-03
SwiftUI编程实现不同TabView标签页中任意导航层级视图之间相互跳转的演示代码
2022-04-03
unlocker_new
2008-11-10
UnlockerEx
2008-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人