我想做一些类的扩展来返回运行时types对象 例如,我创build了类A的扩展 extension A { class func niceObject() -> XXXXX { // in objective-c is instancetype return …. } } 所以任何人都知道在Swift中有实例types关键字或不能replacexxxxx ,我可以在A的子类上调用这个函数,而无需手动转换 var b: B = B.niceObject() 谢谢
如果我将swift常量声明为一个全局常量,如: let a = "123" 但目标c中找不到a 。 如何解决这个问题?
是否有可能扩展一个generics类的专门/构造genericstypes? 我想用一个方法来扩展IntArrays来计算它的元素的总和。 例如 extension Array<Int> { func sum() -> Int { return reduce(0) { $0 + $1 } } }
我有一个协议,我这样定义: protocol MyProtocol { … } 我也有一个通用的结构: struct MyStruct <T> { … } 最后我有一个通用的function: func myFunc <T> (s: MyStruct<T>) -> T? { … } 如果Ttypes符合MyProtocol,我想在函数内部进行testing。 本质上我想能够做到(〜伪代码): let conforms = T.self is MyProtocol 但是这会引发一个编译器错误: error: cannot downcast from 'T.Type' to non-@objc protocol type 'MyProtocol' let conforms = T.self is MyProtocol ~~~~~~ ^ ~~~~~~~~~~ 我也试过变种,比如T.self is MyProtocol.self […]
我应该给我的Swift类名称一个三个字母的前缀由Objective-C约定推荐:类名称必须在整个应用程序中是唯一的 ?
我有以下代码的问题: func generic1<T>(name : String){ } func generic2<T>(name : String){ generic1<T>(name) } 通用1(名称)结果编译器错误“不能明确地专门化通用函数” 有什么办法可以避免这个错误? 我不能改变generic1函数的签名,所以它应该是(String) – > Void
你如何获得Swift时代的秒数?
在我的GPUImage框架的Objective-C代码中,我有下面的macros: #define STRINGIZE(x) #x #define STRINGIZE2(x) STRINGIZE(x) #define SHADER_STRING(text) @ STRINGIZE2(text) 这使我可以在我的自定义filter子类中内联多行顶点和片段着色器作为NSString文字,如下所示: NSString *const kGPUImagePassthroughFragmentShaderString = SHADER_STRING ( varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture; void main() { gl_FragColor = texture2D(inputImageTexture, textureCoordinate); } ); GPUImage需要这个以提供格式化的顶点和片段着色器,这些着色器包含在filter子类的正文中。 将它们作为单独的文件运送将使得框架无法被编译到静态库中。 使用上面的macros,我可以使这些着色器能够在框架代码和外部着色器文件之间复制和粘贴,而不需要大量的重新格式化工作。 Swift不使用编译器macros,文档有这样的说法 : 在C和Objective-C中使用复杂的macros,但在Swift中没有对应的macros。 复杂的macros是不定义常量的macros,包括括起来的函数式macros。 你在C和Objective-C中使用复杂的macros来避免types检查约束,或者避免重新input大量的样板代码。 但是,macros可能会使debugging和重构变得困难。 在Swift中,您可以使用函数和generics来获得相同的结果,而不会有任何妥协。 因此,C和Objective-C源文件中的复杂macros不能用于Swift代码。 每行“在Swift中,你可以使用函数和generics来实现相同的结果,而不会有任何妥协”,有没有一种方法在Swift中提供多行string文字,而不诉诸串联操作的string?
我正在尝试使用@IBAction将button单击事件绑定到Swift方法。 在Objective-C中,IBAction的参数types是id。 什么是在Swift中相当于ID?
我尝试将名为AnalyticProtocol的Swift协议导入名为AnalyticProtocol的Objective-C类。 protocol AnalyticProtocol { } 我从一个现有的Objective-C项目开始(我没有用xCode创build一个新的Swift项目,我没有发现如何将我的Objective-C项目configuration为xCode 6中的Swift项目 )。 在我的Swift文件中,我包含名为MyProjectName-Swift.h的.h文件,但编译器向我返回一个错误,告诉我它不存在 。 所以,我创build了一个名为MyProjectName-Swift.h的.h文件,它实际上是空的(我不知道应该放在里面)。 在苹果文档中他们说我必须在我的.m文件中包含名为MyProjectName-Swift.h .h文件。 但是我需要把它包含进我的.m文件中,但是放到我的.h文件中。 这可能是有问题的吗? 当我尝试编译我有这个错误: 0:错误:xxxAnalyticFactory.h:39:找不到'协议声明'AnalyticProtocol' 而这个罪名是: @interface AnalyticFactory : NSObject { Class<AnalyticProtocol> _analyticProtocolClass; // The type of the analytic class currently used. } 我想我不太清楚如何将Swift协议导入到Objective-C类中。 有没有人看到我在做什么错误?