class MyString: String {}
给出错误:
继承自非协议,非类型'字符串'`。
看起来String
不是一个类。但是为什么它可以在预期AnyObject
的情况下使用?我虽然AnyObject
仅用于类类型,而Any
可以是类或非类类型。
答案 0 :(得分:21)
如果您命令+点击Xcode中的String
struct String {
init()
}
所以String
是struct
。
您不能从struct
继承,因为错误消息表示:
错误:从非协议,非类类型'字符串'
继承
但是,只有直接或间接导入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>
但是除非你绝对必须,否则尽量避免继承String
或NSString
。您可以在NSString Subclassing Notes了解更多信息。
使用扩展程序向String
extension String {
func print() {
println(self);
}
}
"test".print()
如果您想要对其进行更多控制,请使用委托模式
struct MyString {
let str : String = ""
func print() {
println(str)
}
}