GVKun编程网logo

如何在 Swift 中打印变量的类型或类?(如何在 swift 中打印变量的类型或类型数据)

14

想了解如何在Swift中打印变量的类型或类?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于如何在swift中打印变量的类型或类型数据的相关问题,此外,我们还将为您介绍关于.NET(CSha

想了解如何在 Swift 中打印变量的类型或类?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于如何在 swift 中打印变量的类型或类型数据的相关问题,此外,我们还将为您介绍关于.NET(CSharp)中打印变量的内存地址、bash – 如何在awk中打印变量、ios – 如何使用Swift打印Data类型变量的内容?、ios – 如何在Swift中使用没有类型参数的泛型类?的新知识。

本文目录一览:

如何在 Swift 中打印变量的类型或类?(如何在 swift 中打印变量的类型或类型数据)

如何在 Swift 中打印变量的类型或类?(如何在 swift 中打印变量的类型或类型数据)

有没有办法快速打印变量的运行时类型?例如:

var now = NSDate()var soon = now.dateByAddingTimeInterval(5.0)println("\(now.dynamicType)") // Prints "(Metatype)"println("\(now.dynamicType.description()")// Prints "__NSDate" since objective-c Class objects have a "description" selectorprintln("\(soon.dynamicType.description()")// Compile-time error since ImplicitlyUnwrappedOptional<NSDate> has no "description" method

在上面的示例中,我正在寻找一种方法来表明变量“soon”的类型是ImplicitlyUnwrappedOptional<NSDate>,或者至少是NSDate!

答案1

小编典典

2016 年 9 月更新

Swift 3.0:使用type(of:), eg type(of: someThing)(因为dynamicType关键字已被删除)

2015 年 10 月更新

我将下面的示例更新为新的 Swift 2.0 语法(例如println,被替换为print, toString()is now
String())。

来自 Xcode 6.3 发行说明

在评论中指出Xcode 6.3
发行说明显示了另一种方式:

当与 println 或字符串插值一起使用时,类型值现在打印为完整的解组类型名称。

import Foundationclass PureSwiftClass { }var myvar0 = NSString() // Objective-C classvar myvar1 = PureSwiftClass()var myvar2 = 42var myvar3 = "Hans"print( "String(myvar0.dynamicType) -> \(myvar0.dynamicType)")print( "String(myvar1.dynamicType) -> \(myvar1.dynamicType)")print( "String(myvar2.dynamicType) -> \(myvar2.dynamicType)")print( "String(myvar3.dynamicType) -> \(myvar3.dynamicType)")print( "String(Int.self)           -> \(Int.self)")print( "String((Int?).self         -> \((Int?).self)")print( "String(NSString.self)      -> \(NSString.self)")print( "String(Array<String>.self) -> \(Array<String>.self)")

哪个输出:

String(myvar0.dynamicType) -> __NSCFConstantStringString(myvar1.dynamicType) -> PureSwiftClassString(myvar2.dynamicType) -> IntString(myvar3.dynamicType) -> StringString(Int.self)           -> IntString((Int?).self         -> Optional<Int>String(NSString.self)      -> NSStringString(Array<String>.self) -> Array<String>

Xcode 6.3 更新:

您可以使用_stdlib_getDemangledTypeName()

print( "TypeName0 = \(_stdlib_getDemangledTypeName(myvar0))")print( "TypeName1 = \(_stdlib_getDemangledTypeName(myvar1))")print( "TypeName2 = \(_stdlib_getDemangledTypeName(myvar2))")print( "TypeName3 = \(_stdlib_getDemangledTypeName(myvar3))")

并将其作为输出:

TypeName0 = NSStringTypeName1 = __lldb_expr_26.PureSwiftClassTypeName2 = Swift.IntTypeName3 = Swift.String

原答案:

在 Xcode 6.3 之前,_stdlib_getTypeName获得了变量的重整类型名称。Ewan Swick
的博客条目有助于破译这些字符串:

eg_TtSi代表 Swift 的内部Int类型。

Mike Ash 有一篇很棒的博客文章,涵盖了相同的主题。

.NET(CSharp)中打印变量的内存地址

.NET(CSharp)中打印变量的内存地址

在.NET中可以使用下面代码打印出变量的内存地址

GCHandle hander = GCHandle.Alloc(device);
var pin = GCHandle.ToIntPtr(hander);
log.Debug(string.Format("Device :{0}", pin));

 

bash – 如何在awk中打印变量

bash – 如何在awk中打印变量

我希望awk解释变量如下
#!/bin/bash

file=tau
f=2.54
order=even

awk '{sum+=$2}; END {print '${file}_${f}_${order}_v1.xls',sum/NR}'
${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

我想要所需的输出如下 –

tau_2.54_even_v1.xls   sum/NR

有人可以帮我解决这个问题吗?

我想这就是你想要的:
#!/bin/bash

file=tau
f=2.54
order=even

awk "{sum+=\$2}; END {print \"${file}_${f}_${order}_v1.xls\",sum/NR}" \
  ${file}_${f}_${order}_v1.xls >> safe/P-state-summary.xls

ios – 如何使用Swift打印Data类型变量的内容?

ios – 如何使用Swift打印Data类型变量的内容?

参见英文答案 > How to convert Data to hex string in swift5个
我要做的就是取一个字符串并获取其十六进制值.我一直关注这个 post.这是我在操场上的代码:
let str = "Say Hello to My Little Friend"
let data = str.data(using: String.Encoding.utf16)
print("\(data!)")

但是,我的代码只打印:

“60 bytes\n”

如何打印十六进制值?供参考,它应该是:

5361792048656c6c6f20746f204d79204c6974746c6520467269656e64

解决方法

只是
print(data! as NSData)

PS:你期望的十六进制是.utf8

ios – 如何在Swift中使用没有类型参数的泛型类?

ios – 如何在Swift中使用没有类型参数的泛型类?

我想在不设置泛型类型参数的情况下将通用对象封装在另一个类中.我创建了一个基础Animal< T>类并从中定义其他子类.例:
public class Animal<T: YummyObject> {
    // Code
}

public class Dog: Animal<Bark> {
    // Code
}

public class Cat: Animal<Meow> {
    // Code
}

并在下面的UITableView扩展中定义了一个没有type参数的Animal属性:

extension UITableView {
    private static var animal: Animal!

    func addAnimal(animal: Animal) {
        UITableView.animal = animal
    }
}

但是这样做时我得到以下编译错误:

Reference to generic type Animal requires arguments in <...>.

这似乎在Java中运行良好.我怎么能在Swift中完成同样的事情呢?

解决方法

Swift还不像Java那样支持 wildcard-style generics(即Animal<?>).因此,常见的模式是定义类型擦除的超类,协议(或包装器)来代替使​​用这种用法.例如:
public class AnyAnimal {
    /* non-generic methods */
}

然后将它用作您的超类:

public class Animal<T: YummyObject>: AnyAnimal {
    ...
}

最后,在非通用代码中使用AnyAnimal:

private static var animal: AnyAnimal!

Swift标准库中的示例.有关实际示例,请参阅KeyPath,PartialKeyPathAnyKeyPath类层次结构.它们遵循我上面概述的相同模式. Collections framework提供了更进一步的类型擦除示例,但使用了包装器.

今天关于如何在 Swift 中打印变量的类型或类?如何在 swift 中打印变量的类型或类型数据的讲解已经结束,谢谢您的阅读,如果想了解更多关于.NET(CSharp)中打印变量的内存地址、bash – 如何在awk中打印变量、ios – 如何使用Swift打印Data类型变量的内容?、ios – 如何在Swift中使用没有类型参数的泛型类?的相关知识,请在本站搜索。

本文标签: