注册 登录
主题 : swift类型这么严格吗
级别: 侠客
UID: 84603
精华: 0
发帖: 75
可可豆: 160 CB
威望: 120 点
在线时间: 970(时)
注册时间: 2011-08-01
最后登录: 2019-03-19
0 楼:  发表于: 2014-06-11 18:54    发自: Web Page

swift类型这么严格吗   

终于开始有空看看swift,看到大家都已经如火如荼了,准备从小到大把细节捋一遍,发现swift类型很严格啊

比如这样就报错了,开始觉得有点奇怪,什么错误呢。。。

func averageOfnums(numbers: Double...)->Double
    {
        var sum = 0.0
        var count = 0       //关键在于这一行
        for num in numbers
        {
            sum += num
            ++count
        }
        
        var result : Double = sum / count
//        sumOfnums(numbers) / numbers.count
        return result
        
    }


发现改成这样就好了
var count = 0改成var count = 0.0或者var count : Double = 0.0强制指定类型就好了,很多语言(额,可能主要是C遗留下的习惯)的隐式类型转换不好用,强制转换好像也不行。。。


后来回去翻了下书,发现有这么一句:值永远不会被隐式转换为其他类型。如果你需要把⼀一个值转换成其他类
型,请显式转换。


嗯。。。虽然有点不习惯,但是看了swift不像是一些脚本语言对类型要求比较宽泛,而是非常的严格。。。应该算是个好习惯吧,就是一时还不适应
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
1 楼:  发表于: 2014-06-11 19:42    发自: iPhone
建议使用var result = sum / Double(count)
在做加1的操作过程中,整型往往比浮点型高效
新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 侠客
UID: 84603
精华: 0
发帖: 75
可可豆: 160 CB
威望: 120 点
在线时间: 970(时)
注册时间: 2011-08-01
最后登录: 2019-03-19
2 楼:  发表于: 2014-06-12 11:05    发自: Web Page
回 1楼(zenny_chen) 的帖子
嗯,你这么一说我想起来了,前几天看过这种转换方式,还是有点不习惯。这个转换相当于.NET的Convert,可以随意转,只是这个是直接用类型转就好了,这样应该经过一些处理,比较安全
级别: 侠客
UID: 84603
精华: 0
发帖: 75
可可豆: 160 CB
威望: 120 点
在线时间: 970(时)
注册时间: 2011-08-01
最后登录: 2019-03-19
3 楼:  发表于: 2014-06-12 11:12    发自: Web Page
回 1楼(zenny_chen) 的帖子
“在做加1的操作过程中,整型往往比浮点型高效 ”,有种醍醐灌顶的感觉,你指的是指令级别的支持吗?浮点加1没有直接的指令支持
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
4 楼:  发表于: 2014-06-12 12:21    发自: Web Page
回 2楼(真时光人) 的帖子
其实,Swift里的类型转换与C语言里的不同。像Double(sum)本质上是利用Double类,通过init(_:Int)构造方法创建了一个Double类型的对象,呵呵。

现在的IOS设备(能支持iOS4.0的),全都支持浮点指令集。iPhone一代支不支持。不过,iPhone 5以下的设备对于浮点数的操作还是会比较慢。而iPhone 5以上的设备,搭载了Apple A6与Apple A7的浮点计算性能几乎能堪比通用算术逻辑操作了。

详细请参考我签名里的CPU Dasher64与CPU Dasher。
新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 侠客
UID: 84603
精华: 0
发帖: 75
可可豆: 160 CB
威望: 120 点
在线时间: 970(时)
注册时间: 2011-08-01
最后登录: 2019-03-19
5 楼:  发表于: 2014-06-12 15:00    发自: Web Page
回 4楼(zenny_chen) 的帖子
Double(sum)这个我了解,和其他语言一样,把基本类型也封装成类。去看了下苹果这两年的变换,原来A6之后自主研发了,我还以为一直还在用ARM的授权。。。软硬都得补补,编译现在LLVM+Clang了,一直关注业务,还以为还是gcc。。。我去,总感觉穿越了一样
转一段作为参考:
2倍的通用寄存器:A32有R0-R14总计15个通用寄存器,A64指令集有R0-R30总计31个通用寄存器,后者是前者的2倍,与苹果宣传的相符。

  2倍的浮点寄存器:相对于通用寄存器的规模增加,A64的浮点寄存器变化其实不算大。A32有32个VFP标量浮点寄存器,每个都是64bit的,而且ARM的浮点寄存器使用使用的是小寄存器,好处是可以将两个小寄存器虚拟成位宽更大的寄存器,A32的32个VFP还可以当作16个128bit的浮点寄存器。

  A64的浮点寄存器总数还是32个,不过每个的位宽提高到了128bit,算起来也可以说是原来的两倍,苹果所说的浮点寄存器提升跟A64指令集也是相符的。
级别: 新手上路
UID: 135407
精华: 0
发帖: 12
可可豆: 47 CB
威望: 47 点
在线时间: 126(时)
注册时间: 2012-04-10
最后登录: 2018-05-03
6 楼:  发表于: 2014-06-12 20:00    发自: Web Page
swift开发者www.swift-open.cn
官方qq交流群113923412
级别: 天使

状态: 连续签到 - [7天]
UID: 5513
精华: 19
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
注册时间: 2009-05-06
最后登录: 2016-08-30
7 楼:  发表于: 2014-06-12 22:57    发自: Web Page
回 5楼(真时光人) 的帖子
呵呵,你又误会了……

Apple A6开始确实是Apple自己对ARM核进行完全地重构,但是仍然完全兼容基本的ARM指令集架构,所以仍然是授权于ARM的。但是某些ARM未定义的具体实现没有按照ARM官方建议的方式来。比如很多协处理器命令几乎都改头换面了……你根本就不知道处理器的任何信息,只能通过系统调用。也正因为如此,Apple可以很轻易地将不公开的参数全部屏蔽掉,比如总线频率、CPU主频等等。俺的CPU Dasher以及CPU Dasher64都是运行时动态计算当前CPU主频。

这里是俺写的更为专业的对ARMv8架构的介绍,你感兴趣可以阅读之:
http://www.opengpu.org/forum.php?mod=viewthread&tid=16288#lastpost

另外,如果你对Apple A系列处理器感兴趣,也可以下载参考俺的CPU Dasher以及CPU Dasher64进行学习。
新浪围脖地址:http://t.sina.com.cn/1181389417
CPU Dasher for OS X: https://itunes.apple.com/cn/app/cpu-dasher/id1013487510?mt=12

级别: 侠客
UID: 84603
精华: 0
发帖: 75
可可豆: 160 CB
威望: 120 点
在线时间: 970(时)
注册时间: 2011-08-01
最后登录: 2019-03-19
8 楼:  发表于: 2014-06-13 13:23    发自: Web Page
回 7楼(zenny_chen) 的帖子
嗯,这次不会了,前辈请多指教,学习了
级别: 新手上路
UID: 12916
精华: 0
发帖: 22
可可豆: 121 CB
威望: 121 点
在线时间: 201(时)
注册时间: 2010-01-12
最后登录: 2016-12-16
9 楼:  发表于: 2014-06-13 15:50    发自: Web Page
我也遇到了类似的问题,我的帖子:http://www.cocoachina.com/bbs/read.php?tid=206186

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部