如何处理存储的属性集并获取 swift
how to deal with stored properties's set and get in swift
这是我们在OC属性中的处理方式
- (void)setText:(NSString *)text
{
if ([text isEqualToString:@"ss"]) {
_text = @"xx";
return
}
_text = text;
}
- (NSString *)text
{
return _text;
}
这是swift中的错误方式,我们不能在set中调用self.xx。
var text : NSString {
get {
return self.text
}
set {
if newValue.isEqualToString("ss") {
self.text = "xx"
} else {
self.text = newValue
}
}
}
我的问题是如何将OC码转成Swift码。
虽然我不太了解在存储的 属性 上使用 getter 和 setter,但在您的情况下,您可以只使用 属性 观察者 didSet
.
var text: String! {
didSet {
if text == "ss" {
text = "xx"
}
}
}
你可以这样试试!
var text: NSString = ""
var newText : NSString {
get {
return text
}
set {
if newValue.isEqualToString("ss") {
text = "xx"
} else {
text = newValue
}
}
}
您将 stored 属性与 computed 属性混淆了。
只有计算属性有一个 getter 和一个可选的 setter;存储的属性也没有。此外,计算的 属性 中的 setter 不在那里设置计算的 属性 的值(它不能,因为 属性 是计算的并没有独立存在);相反,它用于设置 other 属性的值,这些属性的值用于计算下一次访问时计算出的 属性。有关示例,请参阅 。
现在,存储属性可以有 属性 个观察者。在您的具体示例中,它看起来像这样:
var text : NSString! {
didSet {
if text.isEqualToString("ss" as NSString) {
text = "xx" as NSString
}
}
}
你也可以有一个willSet
块。请注意,在 Swift 1.2 中,NSString 和 String 不再自动桥接,因此您需要在必要时将它们相互转换。
这是我们在OC属性中的处理方式
- (void)setText:(NSString *)text
{
if ([text isEqualToString:@"ss"]) {
_text = @"xx";
return
}
_text = text;
}
- (NSString *)text
{
return _text;
}
这是swift中的错误方式,我们不能在set中调用self.xx。
var text : NSString {
get {
return self.text
}
set {
if newValue.isEqualToString("ss") {
self.text = "xx"
} else {
self.text = newValue
}
}
}
我的问题是如何将OC码转成Swift码。
虽然我不太了解在存储的 属性 上使用 getter 和 setter,但在您的情况下,您可以只使用 属性 观察者 didSet
.
var text: String! {
didSet {
if text == "ss" {
text = "xx"
}
}
}
你可以这样试试!
var text: NSString = ""
var newText : NSString {
get {
return text
}
set {
if newValue.isEqualToString("ss") {
text = "xx"
} else {
text = newValue
}
}
}
您将 stored 属性与 computed 属性混淆了。
只有计算属性有一个 getter 和一个可选的 setter;存储的属性也没有。此外,计算的 属性 中的 setter 不在那里设置计算的 属性 的值(它不能,因为 属性 是计算的并没有独立存在);相反,它用于设置 other 属性的值,这些属性的值用于计算下一次访问时计算出的 属性。有关示例,请参阅
现在,存储属性可以有 属性 个观察者。在您的具体示例中,它看起来像这样:
var text : NSString! {
didSet {
if text.isEqualToString("ss" as NSString) {
text = "xx" as NSString
}
}
}
你也可以有一个willSet
块。请注意,在 Swift 1.2 中,NSString 和 String 不再自动桥接,因此您需要在必要时将它们相互转换。