Swift语法问题
如何声明一个类的delegate属性?(liushuai)weak var delegate : UItableVIEwDelegate?
其他optional的属性如果需要弱引用也同样是用weak关键词修饰。
如果不是optional属性,需要弱引用时应使用uNowned。
如何使用宏?(Selengge)Swift不支持头文件或pch文件中定义的宏。旧代码中以宏方式实现的开关或函数等,应在GlobalFunctions.swift中重新定义。如检测是否iPad环境的方法由旧代码的IS_PAD宏变为新的NaviAppIsPad()函数。
需要注意的是,编译器开关在Swift中是可以判断的,例如:
// Objective-C #ifdef DEBUG ...#else ...#endif
// Swift #if DEBUG...#else#end调用类似addTarget(target: AnyObject?,action: Selector,forControlEvents controlEvents: UIControlEvents)之类的方法时,selector应如何填写?(haoyun)
selector类型可以用Selector类的构造函数创建,在这里也可以直接写方法签名字符串。需要注意的是,方法签名字符串是Objective-C的格式。
为何创建自己写的UIVIEwController子类对象时出现编译器错误“missing argument for paramter 'coder' in call”?(haoyun)需要注意designated initializer在Swift中是强制的,子类继承时一定要注意继承并调用正确的父类构造方法。UIVIEwController的designated initializer是init(nibname: bundle:)方法,因此子类不但需要实现init(coder:),也需要继承init(nibname: bundle:)。创建UIVIEwController子类的实例时,不能使用无参数的初始化方法。
// 实现init方法 overrIDe init(nibname nibnameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { TitleLabel @H_404_107@= UILabel(frame: CGRectZero) super@H_404_107@.init(nibname: nibnameOrNil, bundle: nibBundleOrNil) TitleLabel@H_404_107@.text @H_404_107@= "增强电子眼" self@H_404_107@.vIEwaddSubvIEw(TitleLabel) } // 调用init方法 var eEyeVC ElectronicEyeVIEwController(nibname: nil, bundle: nil)Swift -> Objective-C 问题 为什么我在Swift中声明的类,在Objective-C中无法引用?(Selengge)
首先需要检查ObjC文件中是否引用了Swift转ObjC的头文件。
#import "OnlineNavigation-Swift.h"
其次,Swift类要在Objective-C中使用,必须满足两个条件其一: a. 有@objc前缀 b. 是继承自ObjC类(如UIVIEw或NSObject)
在混合工程内,不推荐使用Swift默认的无父类声明(即只使用@objc修饰),除非这个类只会被Swift代码调用。一般应至少继承NSObject,原因是这样可以让对象带上ID中的若干方法及其默认实现,如responsesToSelector:,方便ObjC代码使用。
为什么以下这个Swift实例方法在Objective-C中看不到也无法调用? (liushuai)func retrIEveListWithHandler(handler:((array:NSArray?, flag:Bool@H_404_107@!) @H_404_107@-> VoID)?){ handler?(array: NSArray(),flag: true) }
原因:Swift中的可选对象类型(NSArray?)对应ObjC中的普通指针(NSArray *),但Swift中的可选值类型(Bool!)在ObjC中没有对应的类型可用,因此该方法无法暴露给ObjC。将Bool!类型改为Bool类型后,问题解决。
注释问题 如何使用类似ObjC中pragma mark的功能?(Selengge)// MARK: - this is a Title如何使用类似ObjC中@brIEf、@returns等文档修饰符?(Selengge)
Swift注释默认进入方法和属性的Description标签,不需要写@brIEf。其他修饰符也有对应的关键词,如@returns在Swift注释里的写法是:returns:。
此外,在Swift中为方法和属性添加说明时,应使用/** */或者///作为注释头尾。
/** @H_404_107@* 这是一个测试类,此说明会出现在description中 @H_404_107@* :note: 一些额外说明 @H_404_107@* :param: param1 一号参数 @H_404_107@* :returns: 返回值的说明 @H_404_107@*/总结
以上是内存溢出为你收集整理的Swift迁移常见问题全部内容,希望文章能够帮你解决Swift迁移常见问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)