我可以将NSLog与Swift结构一起使用吗?

时间:2015-09-14 22:45:27

标签: swift struct nslog

我希望能够将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'

似乎结构数组有类似的问题(因为数组也是结构?)

2 个答案:

答案 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>