我希望能够将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'
似乎结构数组有类似的问题(因为数组也是结构?)
答案 0 :(得分:8)
就NSLog而言,CGRect 不是一个Swift结构。这是一个C结构。并且已经有一个C函数可以让你记录一个:NSStringFromCGRect
。这正是 for
NSLog("rect for something %@", NSStringFromCGRect(self.someView.frame))
另一方面,Swift已经为CGRect提供了自己的字符串表示,你可以通过强制转换为String来获取它:
NSLog("rect for something %@", String(self.someView.frame))
但是你不能在任何类型的NSLog调用中直接使用CGRect。它不是具有相应格式说明符的东西。如果你想使用带有NSLog的CGRect,你必须通过某些调用传递它,这会产生NSLog可以处理的东西。您在Swift中编写此代码的事实无关紧要;要使用NSLog,必须使用它,就像使用Objective-C / C一样,因为NSLog 是 Objective-C / C.
目前还不太清楚为什么你在这里使用NSLog,因为听起来你并不知道自己在做什么。此外,print
将为您执行此操作和如果您符合Printable(现在称为CustomStringConvertible,它将自动调用您的description
,因为Apple不关心多长时间和丑陋事物的名称是)。
答案 1 :(得分:0)
您可以使用'扩展程序'对于swift中的C结构,您可以在Xcode6(Swift1.2)中编写它。
2015-09-15 14:00:04.072 aaa[7330:158325] rect for something 0.0,0.0_|375.0,667.0
结果:
<html>
<head>
<title>eLab</title>
<script type="text/javascript">
function change()
{
if(document.getElementById('myTable').style.height == "400px") {
document.getElementById('myTable').style.height= "1000";
document.getElementById('myTable').style.width= "400";
}
else {
document.getElementById('myTable').style.height= "400";
document.getElementById('myTable').style.width= "1000";
}
return true;
}
</script>
</head>
<body>
<table border="1" cellpadding="1" cellspacing="1" style="height:1000;width:400;" id="myTable" align=center>
<tbody>
<tr>
<th>This is the head!</th>
<th>I'm the head too!</th>
</tr>
<tr>
<td align=center>Part 1</td>
<td align=center>Part 2</td>
</tr>
<tr>
<td align=center>Part 3</td>
<td align=center>Part 4</td>
</tr>
<tr>
<td colspan="2" align=center> Part 5</td>
</tr>
</tbody>
</table>
<center>
<input type="button" onclick="change()" value="Change It">
</center>
</body>
</html>