有没有办法在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!.
我有一个由数组组成的数组AnyObject.我想迭代它,并找到所有元素作为数组实例.
如何在Swift中检查对象是否属于给定类型?
我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.
以下是问题:
self.class?AnyClass结果实例化一个类NSClassFromString?AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)如果我有一个UIViewController子类,我怎么能把类名作为字符串?我试过了[vc class],但这会返回一个Class对象,而不是一个NSString.
我在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)
我最近将我的项目升级到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中这是必要的而不是客观的?
swift ×5
ios ×3
class ×1
cocoa-touch ×1
function ×1
objective-c ×1
static ×1
typechecking ×1
types ×1
xib ×1