Swift - 如何为我的 class 定义一个特殊方法,returns 其对象的字符串表示
Swift - How to I define a special method for my class that returns a string representation of its object
在python中,如果你想定义一个对象的字符串表示,你可以这样做:
class Person:
def __init__(self, first, last, age):
self.first = first
self.last = last
self.age = age
def __str__(self):
return f'{self.first} {self.last}, {self.age} years old'
person_1 = Person('John', 'Smith', 25)
现在,如果你写 print(person_1)
或 str(person_1)
,那么你会得到 John Smith, 25 years old
。
如果 __str__
方法不存在,那么输出将是 <__main__.Person object at 0x104e12e20>
如何在 swift 中做同样的事情?
当然,我可以用我想要的任何名称定义一个方法,然后在对象上调用它,但它会缺少语法糖。
只要遵守CustomStringConvertible
协议即可。您所要做的就是实施 description
属性.
struct Person: CustomStringConvertible {
let name: String
let age: Int
var description: String {
return "[name: \(name), age: \(age)]"
}
}
print(Person(name: "bob", age: 32)) // [name: bob, age: 32]
在python中,如果你想定义一个对象的字符串表示,你可以这样做:
class Person:
def __init__(self, first, last, age):
self.first = first
self.last = last
self.age = age
def __str__(self):
return f'{self.first} {self.last}, {self.age} years old'
person_1 = Person('John', 'Smith', 25)
现在,如果你写 print(person_1)
或 str(person_1)
,那么你会得到 John Smith, 25 years old
。
如果 __str__
方法不存在,那么输出将是 <__main__.Person object at 0x104e12e20>
如何在 swift 中做同样的事情?
当然,我可以用我想要的任何名称定义一个方法,然后在对象上调用它,但它会缺少语法糖。
只要遵守CustomStringConvertible
协议即可。您所要做的就是实施 description
属性.
struct Person: CustomStringConvertible {
let name: String
let age: Int
var description: String {
return "[name: \(name), age: \(age)]"
}
}
print(Person(name: "bob", age: 32)) // [name: bob, age: 32]