Swift中数组类型的强制转换

发布于 2022-09-11 17:38:14 字数 256 浏览 9 评论 0

题目描述

下方图片中的[String]是强制类型转换吗?感觉很别扭呀!

相关资料

clipboard.png

你期待的结果是什么?实际看到的错误信息又是什么?

帮我分析一下为什么要这么写? 不写[String]可不可以?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离鸿 2022-09-18 17:38:14

下方图片中的 [String] 不是强制类型转换。
是拿着 dict 里面的元素,做了一个初始化。

不写 [String] 不可以。
不写 [String] , codes 不是 [String] 类型,是 Dictionary<String, String>.Keys 类型。

one

写了 [String] ,就是 [String] 类型了。

two

因为不写 [String] ,是 Swift 中的浅拷贝。codes 指向的内存,还是 dict 的 keys .
写了 [String] ,就是重新给 codes 分配了一片内存,针对他的操作与原来的 dict 无关。

如果 Swift 不这么设计,每次改 codes 就是, copy on write . 语义上,不清晰,也就不安全

代码如下:

let dict = ["one":"一" , "two": "二"]

var keys = dict.keys

var keysTwo = [String](dict.keys)

keysTwo = ["a"]

print(dict)

print(keysTwo)
漫雪独思 2022-09-18 17:38:14

这是语法呀,不写就是Any吧。

流星番茄 2022-09-18 17:38:14

不行,Swift中语法规定了 Array创建的时候需要指明存放什么类型,如果尚未确定一般用 Any 或 AnyObject声明,这个写法并不是强制类型转换

仔细研究swift你会发现 它真的是一种严谨性语言,对于可能产生的结果它认为开发者应该都是知道并明确的,如果有遗漏则会强制报错提示,OC由于做了很多隐式转换所以往往导致出现了一些可能预期之外的结果

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文