class MyString: String {}
Run Code Online (Sandbox Code Playgroud)
给出错误:
从非协议,非类型'String'继承.
所以看起来String
不是一个阶级.但为什么它可以用于AnyObject
预期的上下文?我虽然AnyObject
只是类类型,但Any
可以是类或非类类型.
Bry*_*hen 22
如果您String
在Xcode中命令+单击
struct String {
init()
}
Run Code Online (Sandbox Code Playgroud)
所以String
是一个struct
.
您不能从struct
错误消息中说明子类:
错误:从非协议,非类型类型'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
^
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
但是尽量避免使用子类String
或NSString
除非你绝对必须.您可以在NSString Subclassing Notes中阅读更多内容.
使用扩展名添加新方法 String
extension String {
func print() {
println(self);
}
}
"test".print()
Run Code Online (Sandbox Code Playgroud)
如果您想要对其进行更多控制,请使用委托模式
struct MyString {
let str : String = ""
func print() {
println(str)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6034 次 |
最近记录: |