我可以将 NSLog 与 Swift 结构一起使用吗?
Can I use NSLog with Swift structs?
我希望能够将 NSLog
与 Swift 结构一起使用。我可以吗?我现在正在做的是:
extension CGRect {
var description:String {
return "\(self.left),\(self.top)_|\(self.width),\(self.height)"
}
}
NSLog("rect for something %@", self.someView.frame.description)
我曾希望只需将 description
var 添加到 CGRect
就足够了,我不需要显式添加 .description
在 NSLog()
调用中。但是当我尝试时,我得到
Argument type 'CGRect' does not conform to expected type 'CVarArgType'
似乎结构数组也有类似的问题(因为数组也是结构?)
就 NSLog 而言,CGRect 不是 Swift 结构。这是一个 C 结构。并且已经有一个 C 函数可以让您记录一个:NSStringFromCGRect
。这正是这个函数的作用 for:
NSLog("rect for something %@", NSStringFromCGRect(self.someView.frame))
另一方面,Swift 确实已经为 CGRect 提供了它自己的字符串表示形式,您只需请求该字符串即可获得它:
NSLog("rect for something %@", String(describing: self.someView.frame))
但是您不能在 任何 类型的 NSLog 调用中直接使用 CGRect。它没有相应的格式说明符。如果你想将 CGRect 与 NSLog 一起使用,你 必须 通过 some 调用传递它,产生 NSLog 可以处理的东西。您在 Swift 中编写此代码的事实无关紧要;要使用 NSLog,您必须完全像 Objective-C/C 一样使用它,因为 NSLog 是 Objective-C/C.
不太清楚的是您为什么要在这里使用 NSLog,因为听起来您不太清楚自己在做什么。此外,print
会为您执行此操作 并且 如果您符合 Printable(现在称为 CustomStringConvertible,因为 Apple 不关心如何事物的名称又长又丑。
您可以在 swift 中将 'extension' 用于 C 结构,您可以在 Xcode6(Swift1.2) 中编写此代码。
extension CGRect: Printable {
public var description:String {
return "\(self.minX),\(self.minY)_|\(self.width),\(self.height)"
}
}
NSLog("rect for something %@", self.view.frame.description)
结果:
2015-09-15 14:00:04.072 aaa[7330:158325] rect for something 0.0,0.0_|375.0,667.0
我希望能够将 NSLog
与 Swift 结构一起使用。我可以吗?我现在正在做的是:
extension CGRect {
var description:String {
return "\(self.left),\(self.top)_|\(self.width),\(self.height)"
}
}
NSLog("rect for something %@", self.someView.frame.description)
我曾希望只需将 description
var 添加到 CGRect
就足够了,我不需要显式添加 .description
在 NSLog()
调用中。但是当我尝试时,我得到
Argument type 'CGRect' does not conform to expected type 'CVarArgType'
似乎结构数组也有类似的问题(因为数组也是结构?)
就 NSLog 而言,CGRect 不是 Swift 结构。这是一个 C 结构。并且已经有一个 C 函数可以让您记录一个:NSStringFromCGRect
。这正是这个函数的作用 for:
NSLog("rect for something %@", NSStringFromCGRect(self.someView.frame))
另一方面,Swift 确实已经为 CGRect 提供了它自己的字符串表示形式,您只需请求该字符串即可获得它:
NSLog("rect for something %@", String(describing: self.someView.frame))
但是您不能在 任何 类型的 NSLog 调用中直接使用 CGRect。它没有相应的格式说明符。如果你想将 CGRect 与 NSLog 一起使用,你 必须 通过 some 调用传递它,产生 NSLog 可以处理的东西。您在 Swift 中编写此代码的事实无关紧要;要使用 NSLog,您必须完全像 Objective-C/C 一样使用它,因为 NSLog 是 Objective-C/C.
不太清楚的是您为什么要在这里使用 NSLog,因为听起来您不太清楚自己在做什么。此外,print
会为您执行此操作 并且 如果您符合 Printable(现在称为 CustomStringConvertible,因为 Apple 不关心如何事物的名称又长又丑。
您可以在 swift 中将 'extension' 用于 C 结构,您可以在 Xcode6(Swift1.2) 中编写此代码。
extension CGRect: Printable {
public var description:String {
return "\(self.minX),\(self.minY)_|\(self.width),\(self.height)"
}
}
NSLog("rect for something %@", self.view.frame.description)
结果:
2015-09-15 14:00:04.072 aaa[7330:158325] rect for something 0.0,0.0_|375.0,667.0