为什么 swift 说当我不导入 cocoa 框架时,没有 String 的成员函数?

Why does swift say that when I don't import the cocoa framework, there are no member functions of the String?

提问人:nansjlee 提问时间:4/13/2023 更新时间:4/13/2023 访问量:43

问:

如果在 vs code 中运行以下函数,会出现 addingPercentEncoding 函数不存在的编译错误,但如果导入 cocoa 框架,它会正常运行。两者有什么区别?

enter image description here

enter image description here

iOS Swift iPhone 字符串 Cocoa

评论

0赞 Paulw11 4/13/2023
import Foundation.导入 Cocoa 会将 Foundation 作为依赖项导入
0赞 Sweeper 4/13/2023
“两者有什么区别?”难道你没想到导入一些东西会给你更多的API使用吗?

答:

0赞 Anya Shenanigans 4/13/2023 #1

该方法 - 是桥接的一部分,它将 的行为添加到 swift String 实现中。此功能是通过导入 .进口也进口。.addingPercentageEncodingNSStringNSStringFoundationCocoaFoundation

是 的一部分,它也通过桥接被导入到 swift 类中。.urlQueryAllowedNSCharacterSetCharacterSet

此处的桥接引入了许多不需要在基类中重新实现的功能。

评论

0赞 Geoff Hackworth 4/13/2023
它并不是一个真正的字符串扩展,它是自动桥接到 Swift 类型(在两者之间转换)的一部分。NSStringString
0赞 Anya Shenanigans 4/13/2023
大多数 NSString 桥接是由 Foundation 完成的。我将更新答案,以便在这一点上更清楚一些
0赞 Geoff Hackworth 4/13/2023
我的评论也不是很清楚。我的意思是 NSString 桥接是 Foundation 的一部分,百分比编码实际上是 NSString 上的一种方法,而不是 String。
0赞 Ritesh Srivastav 4/13/2023 #2

addingPercentEncoding(withAllowedCharacters:) 函数是 Swift 中 Foundation 框架的一部分,它提供了一组用于处理字符串、日期、URL 等的常见数据类型和 API。另一方面,Cocoa 框架是一个建立在 Foundation 之上的更高级别的框架,并为开发 macOS 和 iOS 应用程序提供了额外的功能。

当你导入 Cocoa 时,你也在导入 Foundation,因为 Cocoa 依赖于 Foundation。这就是为什么您能够在没有任何编译错误的情况下使用 addingPercentEncoding(withAllowedCharacters:) 函数的原因。