Swift 学习笔记(对象和类)

类的最基本特性就是封装, Swift 的类可以想见就是把 let 的常量, var 的变量, func 的方法写在 class 定义里。在此之上就涉及变、常量的初始,实例的初始化。Swift 的类定义与 Java 相比还是有些特别的地方,如属性不存在默认值,必须在构造函数中初始化; 构造函数还是沿用了 Objective-C 的方式,名称都是 init; 实例化时不需要 new 等等。

Swift 的类终于不用像 Objective-C 那样接口定义和实现分开来写了。

下面尽量用一个类声明来说明 Swift 类和对象更多的问题 阅读全文 >>

类别: Swift. 标签: . 阅读(23). 评论(0) »

Swift 学习笔记(@autoclosure 与 call-by-name)

咋一眼看到 Swift @autoclosure 自动闭包便不由自主的联想到 Scala 的 Call-By-Name 求值策略。既然主要话题是关于 Swift 的,那还是 Swift 的 @autoclosure 先入为主,下面例子中的 greet(name: () -> String) 接收一个闭包作为参数

func greet(name: () -> String) {
    print("Hello \(name())")
}

greet({() in return "Swift"}) //标准
greet({return "Swift"})       //简化
greet({"Swift"})              //再简化

greet{"Swift"}  //因为 greet 只有一个参数,因而可以这样写

greet(_:) 的函数调用不断简化,最后简化为 greet{"Swift}。总而言之大括号是甩不了了,有大括号的围绕才叫闭包。

同时我们依据闭包的简化规则倒退发现:给任何一个表达式两边加上大括号 {},就构成了一个闭包,它是无参数的闭包,返回值可有可无。例如 {1+2}, {foo(10)+5}, {print("Hello")}, {array.removeAtIndex(0)} 等等

至此,我们还未死心,思考能不能对 greet{"Swift"} 的写法进一步简化,这就要请出 @autoclosure 隆重登场, 对 greet() 的 name 参数前加上  @autoclosure, 就是 阅读全文 >>

类别: Swift. 标签: . 阅读(46). 评论(0) »

Swift 学习笔记(闭包)

谈到函数式编程,恐怕最不能放过的就是闭包。闭包的定义总是不那么清晰,好像每种语言都有小许的差别。通常说的是可以捕获(访问)外部变量语句块,Swift 的闭包类似于 Objective-C 的 Block 或其他语言的 Lambda 表达式。所以闭包同 Lambda 基本上是同义词。

现在还没完, Swift 认为全局函数(有名字的,不能捕获外部变量)和嵌套函数(有名字,可捕获外部变量)也认为是特殊的闭包。闭包表达式(无名字的闭)才是真正意义上的闭包,它用最简洁的方式来书写一个函数。因此它尽了最大的可能的作了约定性的简化,例如参数与返回类型的推断,return 的省略,无参或只有一个参数的简化。

闭包的语法形式

   { (parameters) -> return type in
        statements
    }

闭包中可用常量参数(let),变量参数(var), inout 参数,甚至是可变个数参数,但是不能用默认参数。说白了,闭包也就是无名函数的另一种写法。 阅读全文 >>

类别: Swift. 标签: . 阅读(25). 评论(0) »

Swift 学习笔记(函数第一等)

正好前段时间在发力理解函数式编程,学习 Swift 至今就想看看 Swift 对函数式编程的支持如何。从变量声明用 let, 以及函数参数的 let 和 var 都非常适合于函数式编程,它们对实例保护的很好。let 和 var 类型的函数参数保证了函数内部操作的是传入参数的深拷贝。

在 Objective-C 中要调用一个函数,除了通过对像为媒介,还能 perform 一个  selector, selector 其实也是定位函数的方式,这更像是反射。其实 C/C++ 的函数指针概念更不错,用于直接定位函数。

所以进一步,函数要成为第一等公民,它本身可以很容易的作为参数传入或作为返回值,即能构成高阶函数。这在 Swift 也是没问题的,我们可以定义函数类型的变量,例如:

func addTwoInts(a: Int, _ b: Int) -> Int {
    return a + b
}

var addFunction: (Int, Int) -> Int = addTwoInts  //addTwoInts 函数类型表示 (Int, Int) -> Int
print(addFunction(1, 2))
let add = addTwoInts       //自动推断出 add 函数的类型

func foo() {
  print(123)
}
let f:()->Void = foo

阅读全文 >>

类别: Swift. 标签: . 阅读(30). 评论(0) »

Swift 学习笔记(函数)

由于 Swift 出自于名门 Apple,与 Objective-C 共同服务于 iOS/Mac OS X 平台,因而看得出它更像是脱胎于 Objective-C。现在来学习它的函数相关的知识,Swift 函数定义有些像 Scala,只是用 func  替代了 def, 返回类型的指定用的是 -> 而不是 =, 格式如下:

func greet(name: String, day: String) -> String {
  return "Hello \(name), today is \(day)"
}

greet("Bob", day: "Tuesday")

当然函数无参数就是空括号(不能省略空括号),无返回值的话就无需 -> 指定类型了,比如 func greet() { print("Hello")},从形式上看不出是否有副作用(纯函数)

调用函数时和 Objective-C 是一样的,除第一个参数不需要指定形参名,其他参数必须指定形参名,并且顺序是要和函数定义时完全一样的。我们知道在 Objective-C 中一般约定把第一次参数包含在方法名中,如 阅读全文 >>

类别: Swift. 标签: . 阅读(25). 评论(0) »

Swift 学习笔记(基本语法)

因为是本人学习 Swift 的笔记,是基于所掌握的其他语言来认识 Swift 的,所以并非详尽的 Swift ABC,也就显得凌乱不堪。
 
不会自动转型,强型转型的方式是 String(变量值), 括号不是括住类型
let number = 123
let message = “total: ” + a  //这是错的,必须写成 “total: ” + String(number), 直接常量的话 let message = “total:” + String(123)
let 为常量, var 为变量, 类型的指定方式与  Scala 一样,如果不让它自动推断或无法推断时,这样指定类型

var width: Double

阅读全文 >>

类别: iOS. 标签: . 阅读(38). 评论(0) »

Swift 语言 Server 端开发资料收集

苹果的 Swift 语言第二版预计在今年底开源,届时还可在 Linux 下使用 Swift 语言。试想一下此语言用在服务端 Web 开发也该是个很好的方向,需要实现对  HTTP 协议的支持。

Swift 本身就可以做 Shell 脚本用,所以以 CGI 的方式运行是没问题的,没有第三方相关的框架,可以自己完全输出响应头和体。

我们可以把 Swift 集成到像 Apache 或 Nginx 的 Web 服务器中,要做的工作可能多些,应该要用到 C/C++ 来写 Swift 支持模块。想下我们用这种 URL http://localhost/service/customer.swift 来访问 swift 实现的后台页面。

或者也可以让 Swift 代码像 NodeJs 一样运行,自己启动 HTTP Server。幸运的是我们已经有了 SwifterTaylor,再配之以纯 Swift 的模板实现 GRMustache, 简单开发不在话下。

一旦该语言流行开了,特别是能用在 Linux 平台下,总会有人去实现出对 HTTP 协议的支持,再配之以模板,让 Swift 像 PHP 一样在 Apache 中运行就不难了。 阅读全文 >>

类别: iOS. 标签: , . 阅读(84). 评论(0) »

Mac OS X 下开发 Android 程序时使用 USB 连真机调试

本人很早一篇 Mac OS X 下开发 Android 程序时使用 WiFi ADB 连真机调试,手机端需要连接  WiFi, Root 权限开启 ADB 端口,电脑上执行 adb connect 命令来让 Mac 连接 Android 真机进行调试,其实用不着那么麻烦。

即使是现在新版的 Andorid SDK Manager 里的 Google USB Drive  Not compatible with Mac OS X,并不是说不支持 USB 连接 Android 手机,而是在 Mac 下根本用不着安装这个驱动,有些知名手机直接 USB 连上 Mac 就能被 DDMS 发现。

而我在用一个小米的手机在连机测试,不被 DDMS 识别,解决办法是把小米手机的 Vendor ID 加到文件 ~/.android/adb_usb.ini 中去就行。

Using Hardware Devices 里有很多手机品牌商的 Vendor ID,没有小米的,不急,手机连上 Mac 从设备信息里查相应的 USB 连接端口上能找到。 阅读全文 >>

类别: Android. 标签: , . 阅读(3,756). 评论(5) »

PhoneGap, 第一个应用

移动开发有三条路,Native, HTML5 和 Hybrid,Native 可以把各种平台的特性充分发挥,HTML5 简单,可限制太多,混合型是个折中的办法。对于那些不很注重特效又需要访问部分本地资源的应用可采用 Hybrid 的方式,而其中的佼佼者就数 PhoneGap,又说 Cordova。它们是两个主,却又基本相似的东西,见 PhoneGap, Cordova, and what’s in a name?

我们既可以选择 PhoneGap,也可以选择 Cordova,安装使用起来基本类似,再往下的发展的就无定数了。鉴于 PhoneGap 依托于 Adobe 那么一个强大的后台,我还是选择试用下 PhoneGap,并且 Adobe 还为它提供了在线构建和源码托管 http://build.phonegap.com。当然这是一家像 Oracle 那样商业气息比较浓的公司,使用在线构建免费用户只能建立一个应用。

现在看一个应用 PhoneGap 的例子,从安装开始,演示平台为 Mac, 其他平台都类似。PhoneGap 可由 NodeJS 来安装,所以首先要在 http://nodejs.org 安装 NodeJS。然后执行下面的命令安装 phonegap: 阅读全文 >>

类别: Mobile. 标签: , , . 阅读(901). 评论(0) »

Using Network Link Conditioner in iOS 6

来到芝加哥后好久没写博客了,有些文章本想翻译后介绍给大家,可如今越发没先前那翻译的意愿了,所以不妨直接贴出原文如下:

I previously covered using Network Link Conditioner to test how your app does in less-than-ideal network scenarios. One of the inconveniences of using it is in order to test your app on a device, you have to take the extra steps to configure a proxy on your computer that your device can connect to over a wi-fi connection. Well, not anymore. With iOS 6, Apple has given us Network Link Conditioner right on the device.

To get started with Network Link Conditioner, first your device must be set up as a developer device. If you haven’t done this yet, you’ll need to go to Xcode, open Organizer (Shift-Command-2), select your device, and click the button that says Use for Development to add the device your developer account. Once you’ve done that, you should be able to open Settings on your device and see a Developer menu near the bottom, just above the apps list. Tapping on that reveals some helpful settings, Network Link Conditioner Status obviously being the one relevant to our interests here. 阅读全文 >>

类别: iOS. 标签: , , . 阅读(536). 评论(0) »
Page 1 of 612345...Last »