首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展NSLayoutAnchor中的编译错误

扩展NSLayoutAnchor中的编译错误
EN

Stack Overflow用户
提问于 2017-02-24 16:51:56
回答 2查看 735关注 0票数 2

我试图在NSLayoutAnchor上创建一个扩展方法,以接受一个乘数。我得到一个奇怪的Swift编译错误(Swift 3,XCode 8.2.1)不是在扩展文件中,而是在相应的.h文件中(这个文件是由编译器自动生成的),用于模块:

代码语言:javascript
复制
@interface NSLayoutAnchor (SWIFT_EXTENSION(MYMODULENAME))
- (NSLayoutConstraint * _Nonnull)constraintTo:(NSLayoutAnchor</* AnchorType */> * _Nonnull)anchor multiplier:(CGFloat)m;
@end

错误指向/* AnchorType */,并指出:“预期类型”。嗯,这是有意义的,因为/* AnchorType */不是一种类型,而是一种评论。但是,我在方法签名中使用了AnchorType类型参数。

扩展源代码如下:

代码语言:javascript
复制
extension NSLayoutAnchor {
  open func constraint(to anchor: NSLayoutAnchor<AnchorType>, multiplier m: CGFloat) -> NSLayoutConstraint {
  // ...
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-09 17:36:22

注:修正了Swift 4的内容,请看下面的回答。

这是目前的一个问题,迅速和objc。不允许迅速扩展objc泛型,然后将其桥接回objc。即使添加一个@nonobjc也不能解决这个问题。在这里查看错误文件:https://bugs.swift.org/browse/SR-2708以获取更多信息。

一个潜在的解决方法是对每种具体类型的NSLayoutAnchor进行扩展。具体类型有NSLayoutXAxisAnchorNSLayoutYAxisAnchorNSLayoutDimension

代码语言:javascript
复制
extension NSLayoutDimension {
    open func constraint(to anchor: NSLayoutDimension, 
             multiplier m: CGFloat) -> NSLayoutConstraint
}

extension NSLayoutXAxisAnchor {
    open func constraint(to anchor: NSLayoutXAxisAnchor, 
             multiplier m: CGFloat) -> NSLayoutConstraint
}

extension NSLayoutYAxisAnchor {
    open func constraint(to anchor: NSLayoutYAxisAnchor, 
             multiplier m: CGFloat) -> NSLayoutConstraint
}
票数 6
EN

Stack Overflow用户

发布于 2017-10-25 07:05:55

从Swift 4开始,现在可以通过用@objc注释扩展来实现这一点。以下代码将编译:

代码语言:javascript
复制
@objc extension NSLayoutAnchor {
    func constraint(to anchor: NSLayoutAnchor<AnchorType>, multiplier: CGFloat) -> NSLayoutConstraint {
        // ...
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42444110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档