gpt4 book ai didi

swift - String 类型是类还是结构?或者是其他东西?

转载 作者:IT王子 更新时间:2023-10-29 05:21:05 25 4
gpt4 key购买 nike

class MyString: String {}

报错:

Inheritance from non-protocol, non-class type 'String'`.

所以看起来 String 不是一个类。但是为什么它可以用在需要 AnyObject 的上下文中呢?我虽然 AnyObject 仅适用于类类型,而 Any 可以是类或非类类型。

最佳答案

如果你在 Xcode 中 command+click String

struct String {
init()
}

所以 String 是一个 struct

您不能从 struct 中继承子类,如错误消息所述:

error: Inheritance from non-protocol, non-class type 'String'

但是,您可以将其隐式转换为 NSString(AnyObject 的子类型)仅当您导入了 Foundation 直接或间接。

来自 REPL

  1> var str = "This is Swift String" 
str: String = "This is Swift String"
2> var anyObj : AnyObject = str
.../expr.oXbYls.swift:2:26: error: type 'String' does not conform to protocol 'AnyObject'
var anyObj : AnyObject = str
^

  1> import Foundation // <---- always imported in any useful application
2> var str = "This is Swift String"
str: String = "This is Swift String"
3> var anyObj : AnyObject = str
anyObj: _NSContiguousString = "This is Swift String" // it is not Swift string anymore
4>

但是尽量避免子类化 StringNSString 除非你绝对必须这样做。您可以在 NSString Subclassing Notes 阅读更多内容.

使用扩展添加新方法到String

extension String {
func print() {
println(self);
}
}

"test".print()

如果你想对其进行更多控制,请使用委托(delegate)模式

struct MyString {
let str : String = ""

func print() {
println(str)
}
}

关于swift - String 类型是类还是结构?或者是其他东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25112081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com