相关疑难解决方法(0)

如何在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" selector

println("\(soon.dynamicType.description()")
// Compile-time error since ImplicitlyUnwrappedOptional<NSDate> has no "description" method
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我正在寻找一种方法来显示变量"很快"是类型ImplicitlyUnwrappedOptional<NSDate>,或至少NSDate!.

types swift

325
推荐指数
16
解决办法
20万
查看次数

检查对象是否是Swift中的给定类型

我有一个由数组组成的数组AnyObject.我想迭代它,并找到所有元素作为数组实例.

如何在Swift中检查对象是否属于给定类型?

type-inference typechecking swift

251
推荐指数
10
解决办法
18万
查看次数

Swift类内省和泛型

我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.

以下是问题:

  • 是否有一个与Obj-C相当的Swift self.class
  • 有没有办法使用AnyClass结果实例化一个类NSClassFromString
  • 有没有办法AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)

introspection swift

118
推荐指数
5
解决办法
6万
查看次数

获取视图控制器的类名称作为字符串

如果我有一个UIViewController子类,我怎么能把类名作为字符串?我试过了[vc class],但这会返回一个Class对象,而不是一个NSString.

cocoa-touch introspection objective-c ios

27
推荐指数
2
解决办法
2万
查看次数

在"class func"方法中获取Swift类名

我在Swift中有一个静态方法

class BaseAsyncTask: WebServiceClient {
      class func execute(content : [String:AnyObject], cancelled:CustomBool)
      {
            // Print class name (BaseAsyncTask) here
      }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何在该方法中获取类名.我试过了

self.dynamicType
Run Code Online (Sandbox Code Playgroud)

但这会产生错误(我想因为类函数中的self)

static class function ios swift

18
推荐指数
3
解决办法
1万
查看次数

Swift:在实例化viewcontroller时加载XIB

我最近将我的项目升级到Swift,我试图弄清楚如何动态地实例化我的XIB,同时保持对我的viewcontrollers的强引用.我讨厌不得不打电话,NSBundle.mainBundle().loadNibNamed("someXib")因为你的viewcontroller的字符串表示可能会使它容易出现拼写错误,很难记住每个XIB的名称,如果我选择的话,很难重命名XIB.

在objective-c中,我只是实例化viewcontroller并像这样推送它:

CRMyViewController *myVC = [CRMyViewController new];
[self.navigationController presentViewController:myVC animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

这允许我强烈引用我的viewcontrollers(及其相关的XIB),如果我拼错或重命名我的viewcontroller,我的项目将无法编译.

当我尝试这种方法引用Swift-XIB时,我的视图从未加载.但是,通过简单地覆盖viewcontroler中的loadView,我能够接近我想要的东西:

override func loadView() {              
    NSBundle.mainBundle().loadNibNamed("CRMyViewController", owner:self, options:nil) 
}
Run Code Online (Sandbox Code Playgroud)

这接近我想要的,因为我只对xib名称进行一次硬编码(并在实际的viewcontroller中),但我仍然更喜欢更动态的方法.

有没有办法动态加载Swift-XIB和viewcontroller?我唯一能想到的是创建自己的基本viewcontroller并以更动态的方式覆盖loadView:

override func loadView() {        
    var className:NSString = NSStringFromClass(self.classForCoder)
    className = className.componentsSeparatedByString(".").last as NSString
    NSBundle.mainBundle().loadNibNamed(className, owner:self, options:nil)
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来加载XIB和viewcontroller?为什么在Swift中这是必要的而不是客观的?

xib uiviewcontroller ios swift

2
推荐指数
1
解决办法
5624
查看次数