Tra*_*ggs 2 struct nslog swift
我希望能够使用NSLogSwift结构.我可以吗?我现在正在做的是:
extension CGRect {
var description:String {
return "\(self.left),\(self.top)_|\(self.width),\(self.height)"
}
}
NSLog("rect for something %@", self.someView.frame.description)
Run Code Online (Sandbox Code Playgroud)
我曾希望简单地添加descriptionvar CGRect就足够了,我不需要.description在NSLog()调用中明确添加.但是,当我尝试我得到
Argument type 'CGRect' does not conform to expected type 'CVarArgType'
Run Code Online (Sandbox Code Playgroud)
似乎结构数组有类似的问题(因为数组也是结构?)
就NSLog而言,CGRect 不是 Swift结构.这是一个C结构.并且已经有一个C函数可以让你记录一个:NSStringFromCGRect.这正是这个功能的用途:
NSLog("rect for something %@", NSStringFromCGRect(self.someView.frame))
Run Code Online (Sandbox Code Playgroud)
另一方面,Swift已经为CGRect提供了自己的字符串表示,你可以通过强制转换为String来获取它:
NSLog("rect for something %@", String(self.someView.frame))
Run Code Online (Sandbox Code Playgroud)
但是你不能在任何类型的NSLog调用中直接使用CGRect .它不是具有相应格式说明符的东西.如果你想使用带有NSLog的CGRect,你必须通过一些调用来传递它,从而产生NSLog可以处理的东西.您在Swift中编写此代码的事实无关紧要; 要使用NSLog,必须使用它,就像使用Objective-C/C一样,因为NSLog 是 Objective-C/C.
不太清楚的是你在这里使用NSLog的原因,因为听起来你并不知道自己在做什么.此外,print它将为您执行此操作,如果您符合Printable(现在称为CustomStringConvertible,因为Apple不关心事物的名称有多长和丑陋),它会自动调用您description.
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |