找回密码
 FreeOZ用户注册
12
返回列表 发新帖回复
楼主: Jay@Au
打印 上一主题 下一主题

[学习深造] 苹果推新编程语言Swift 替代Objective C

[复制链接]
31#
发表于 4-6-2014 21:16:20 | 只看该作者

给个例子比较容易理解。
回复  

使用道具 举报

32#
发表于 4-6-2014 21:38:26 | 只看该作者
本帖最后由 woodheadz 于 4-6-2014 21:46 编辑
cais 发表于 4-6-2014 21:16
给个例子比较容易理解。


我的意思就是沿用传统做法,例如这样:
  1. func SayHelloCallback():string;
  2. var sayHello:SayHelloCallback;
复制代码
回调函数在设计上约等于只拥有一个函数的接口定义。换句话说,当一个模块要求用一个函数变量输入回调函数时,他实际上是用函数签名描述了一个交互协议,要求调用者按协议(函数签名)编写函数。
所以为函数类型取一个名字是很有必要的做法。另外这也是省力的做法,否则你至少需要把同一个函数签名写上两遍。

我不知道你这种写法swift是否支持。如果支持,那么swift这个做法实际上是提供了一种“匿名函数类型”(不是匿名函数)的写法,我实在想不出这种写法有什么优势。
回复  

使用道具 举报

33#
发表于 4-6-2014 21:59:03 | 只看该作者
本帖最后由 cais 于 5-6-2014 11:02 编辑

如果有在MQ的同学,可以参加https://wiki.mq.edu.au/display/plrg/PL+Reading+Group

这个星期五就是很应时的讨论swift。 做PL的可能是少数几个跟工业界关系紧密的研究领域吧。

我没去参加过。不知道他们的讨论理论性有多强。

@karl.lee.2004  
回复  

使用道具 举报

34#
发表于 4-6-2014 21:59:05 | 只看该作者
woodheadz 发表于 4-6-2014 21:38
我的意思就是沿用传统做法,例如这样:回调函数在设计上约等于只拥有一个函数的接口定义。换句话说,当 ...

你的观点scala表示支持
回复  

使用道具 举报

35#
发表于 4-6-2014 22:25:02 | 只看该作者
本帖最后由 cais 于 4-6-2014 22:26 编辑
woodheadz 发表于 4-6-2014 21:38
我的意思就是沿用传统做法,例如这样:回调函数在设计上约等于只拥有一个函数的接口定义。换句话说,当 ...


你的理解是对的。
但是我不赞同 “匿名函数类型” 是不必要的的观点。
就以apple 网站上的例子:https://developer.apple.com/libr ... 014097-CH10-XID_204
  1. func addTwoInts(a: Int, b: Int) -> Int {
  2.     return a + b
  3. }
  4. func multiplyTwoInts(a: Int, b: Int) -> Int {
  5.     return a * b
  6. }
复制代码
The type of both of these functions is (Int, Int) -> Int. This can be read as:

“A function type that has two parameters, both of type Int, and that returns a value of type Int.”
  1. var mathFunction: (Int, Int) -> Int = addTwoInts
复制代码
This can be read as:

“Define a variable called mathFunction, which has a type of ‘a function that takes two Int values, and returns an Int value.’ Set this new variable to refer to the function called addTwoInts.”

我觉得就是很好的例子。在定义"mathFunction"的时候,的确是没必要再重新给“(Int, Int) -> Int”起个名字,因为只用到一次。
用函数来当另一个函数的参数或返回值也是同样道理。
要起个名字也不是不行,不过这个Swift好像没有提供类似于C的typedef一类的东西。还没看完。目前看到的自定义的type就是class跟struct。好像没有可以像haskell那样可以自由定义新的type的语法。
以上addTwoInts跟multiplyTwoInts其实定义的是实现,是对于"(Int, Int) -> Int“这个函数类型的实现,并不是定义了函数类型本身。
你说的以下用法是有问题的。
  1. var sayHello : SayHelloCallback;
复制代码
假设swift可以自动推导类型的话,最多也只是写成
  1. var sayHello = SayHelloCallback;
复制代码
此外匿名函数对于closure的用处也很大:https://developer.apple.com/libr ... 014097-CH11-XID_117
回复  

使用道具 举报

36#
发表于 4-6-2014 22:40:33 | 只看该作者
本帖最后由 woodheadz 于 4-6-2014 22:42 编辑
cais 发表于 4-6-2014 22:25
你的理解是对的。
但是我不赞同 “匿名函数类型” 是不必要的的观点。
就以apple 网站上的例子:http ...


你这个例子里还漏了一个角色,就是回调函数的调用者。它很可能是这样的:
  1. func callMathFunction(mathFunction: (Int, Int) -> Int ){
  2.     mathFunction(1,2);
  3. }
复制代码
加上这个,你是不是又把函数签名写了一遍?


在C#里, 你可以这样:
  1. delegate int MathFunc(int, int);

  2. int callMathFunc(MathFunc func)
  3. {
  4.     func(1,2);
  5. }

  6. var func = multiplyTwoInts;
  7. callMathFunc(func);
复制代码
你看这是不是不需要使用->这么奇怪的语法?

用:来替换->其实根本不影响匿名函数。例如你这么来代码也很清楚:
  1. callMathFunc((a:int,b:int): int
  2. {
  3.     return a+b;
  4. })
复制代码
回复  

使用道具 举报

37#
发表于 4-6-2014 22:55:26 | 只看该作者
woodheadz 发表于 4-6-2014 22:40
你这个例子里还漏了一个角色,就是回调函数的调用者。它很可能是这样的:加上这个,你是不是又把函数签 ...

用:替换->的话,定义"匿名函数“变量的时候会有点怪
  1. var aMathFunc : (int, int) : int;
复制代码
语法上能不产生歧义的话,就看个人习惯了。

能够支持匿名函数,让语言灵活一点,我觉得挺好的。
如果你喜欢每个函数类型都给个名字,这也是个好的编程习惯。但是强求每个函数类型都这样,就不一定是好事了。
感觉有点像进入了类似应不应该用Pair一类的东西的讨论了
http://sysmagazine.com/posts/123790/
回复  

使用道具 举报

38#
发表于 4-6-2014 23:22:10 | 只看该作者
cais 发表于 4-6-2014 22:55
用:替换->的话,定义"匿名函数“变量的时候会有点怪语法上能不产生歧义的话,就看个人习惯了。

能够支 ...

我关键的point其实是,“匿名函数类型”这种东西无论从省代码量的角度还是从提高代码阅读性的角度都没有存在的价值。
匿名函数现在主流语言都支持,不过我是第一次看到有“匿名函数类型”这种东西出现。和用“->”来替换“:”一样,都是我无法理解的设计。
因此我认为swift的设计者功力还是不能和anders这样的大师比。

不过考虑到swift是用来替代objectC,我就完全释然了。只要能取代objectC这样东西,swift就算在怪异点,我也要点个赞!

评分

参与人数 1威望 +20 收起 理由
cais + 20 你太有才了!

查看全部评分

回复  

使用道具 举报

39#
发表于 5-6-2014 01:04:51 | 只看该作者
提示: 作者被禁止或删除, 无法发言
反正语言么能自圆其说就行,新语言差不到哪里去。 一家一门语言,不愁没东西学
回复  

使用道具 举报

40#
发表于 5-6-2014 07:52:52 | 只看该作者
Jay@Au 发表于 4-6-2014 13:15
beta版本,不过dev member才能下,交99刀那种

我看了下,没有xcode 6 beta给我下载
回复  

使用道具 举报

41#
 楼主| 发表于 5-6-2014 09:42:42 | 只看该作者
DDD888 发表于 5-6-2014 07:52
我看了下,没有xcode 6 beta给我下载

我没有交99,所以看不到。你是交了99的会员应该可以看到啊, https://developer.apple.com/devcenter/ios/index.action 这个页面里面找不到下载链接?
回复  

使用道具 举报

42#
发表于 5-6-2014 09:46:34 | 只看该作者
Jay@Au 发表于 5-6-2014 09:42
我没有交99,所以看不到。你是交了99的会员应该可以看到啊, https://developer.apple.com/devcenter/ios ...

这是复制下来的内容

OS X Mavericks         OS X Yosemite Developer Preview
Developing for OS X Mavericks

Resources for OS X Mavericks

Downloads
Downloads
Download the latest build of OS X.
Ref Lib
Mac Developer Library
Articles
Getting Started
Guides
Reference
Release Notes
Sample Code
Technical Notes
Technical Q&As
Videos
Development Videos
WWDC 2013
Featured Content

OS X Mavericks for Developers
OS X Mavericks API Diffs
Distributing Your Mac Apps
Submitting to the Mac App Store
App Sandboxing
Developer ID and Gatekeeper
Map Kit Framework Reference
In-App Purchase
Game Center
OpenCL
OpenGL
High Resolution
Push Notifications
Notification Programming Guide for Websites
iCloud
Downloads

Before You Download OS X Mavericks from the Mac App Store
Ensure you are using a 64-bit, Intel-based Mac running either Mac OS X v10.6.7 Snow Leopard or later.
You must have at least 8GB of free disk space to install OS X Mavericks.
Xcode 5.0.1 is required to develop applications for OS X Mavericks.
回复  

使用道具 举报

43#
 楼主| 发表于 5-6-2014 12:06:55 | 只看该作者
DDD888 发表于 5-6-2014 09:46
这是复制下来的内容

OS X Mavericks         OS X Yosemite Developer Preview

估计链接的确不好找, 看看这个帖子http://apple.stackexchange.com/q ... wnload-xcode-6-beta , 我不是member不好试
回复  

使用道具 举报

44#
发表于 5-6-2014 12:22:10 | 只看该作者
那原来那些苦学objective c的人岂不是哭死?程序猿果然不是人啊。。。
回复  

使用道具 举报

45#
发表于 5-6-2014 12:47:11 | 只看该作者
Jay@Au 发表于 5-6-2014 12:06
估计链接的确不好找, 看看这个帖子http://apple.stackexchange.com/questions/132842/where-can-i-downl ...

找到了
回复  

使用道具 举报

46#
发表于 5-6-2014 13:25:08 | 只看该作者
装好了,确实是有swift的选择的

评分

参与人数 1威望 +20 收起 理由
cais + 20 你太有才了!

查看全部评分

回复  

使用道具 举报

47#
发表于 5-6-2014 13:52:20 | 只看该作者
不知道是不是只能跑在iOS8上面。
不过苹果push update的能力很强,应该很快就可以把大部分的iphone, ipad都更新成iOS8
参考:http://www.businessinsider.com.au/chart-of-the-day-apples-impressive-lack-of-mobile-fragmentation-2013-6
http://www.businessinsider.com.au/chart-of-the-day-ios-vs-android-fragmentation-2012-6
回复  

使用道具 举报

48#
发表于 5-6-2014 13:57:56 | 只看该作者
cais 发表于 5-6-2014 13:52
不知道是不是只能跑在iOS8上面。
不过苹果push update的能力很强,应该很快就可以把大部分的iphone, ipad都 ...

我是痛恨苹果的update,如果不跟新,那update的标志让我心烦

但我决不会去跟新我的ipod touch 5,如果跟新,我的ipod touch 5就废掉了,因为那里边的cpu的速度不是很快
回复  

使用道具 举报

49#
发表于 5-6-2014 15:05:32 | 只看该作者
Object-C现在用的很顺手,又得换swift,希望swift不要让我们失望
回复  

使用道具 举报

50#
发表于 5-6-2014 15:09:56 | 只看该作者
cais 发表于 5-6-2014 13:52
不知道是不是只能跑在iOS8上面。
不过苹果push update的能力很强,应该很快就可以把大部分的iphone, ipad都 ...

怎么可能只在IOS8上跑,都编译成2进制了

评分

参与人数 1威望 +20 收起 理由
cais + 20 谢谢分享!

查看全部评分

回复  

使用道具 举报

51#
发表于 5-6-2014 15:20:02 | 只看该作者
woodheadz 发表于 3-6-2014 21:08
当然,我说的就是返回值类型。

以下面这个函数为例:如果设计为这样:是不是会更自然? 而且这样也和定 ...

如果给一个非程序员解释一下,他会觉得 -> 更自然,因为很容易就理解成前面的函数“推出”后面的返回值

评分

参与人数 1威望 +20 收起 理由
cais + 20 我很赞同!

查看全部评分

回复  

使用道具 举报

52#
发表于 5-6-2014 19:49:46 | 只看该作者
cais 发表于 5-6-2014 13:52
不知道是不是只能跑在iOS8上面。
不过苹果push update的能力很强,应该很快就可以把大部分的iphone, ipad都 ...

我测试过了,可以在ios 7.0.4上跑啦
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 30-7-2025 22:08 , Processed in 0.033351 second(s), 37 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表