小编Ram*_*ing的帖子

如何在框架中使用Swift扩展Objective-C类?

我有一个(OS X)Objective-C框架,我想添加一些Swift扩展,我正在使用Xcode7ß6来处理这个问题.框架中有一个类(我们称之为"Sample")在文件"Sample.h"和"Sample.m"中实现."Sample.h"包含:

#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property   int     x;
@end
Run Code Online (Sandbox Code Playgroud)

..和"Sample.m"包含:

#import "Sample.h"

@implementation Sample
- (instancetype) init {
    if ((self = [super init]) == nil) return nil;
    self.x = 99;
    return self;
}
@end
Run Code Online (Sandbox Code Playgroud)

我在框架中添加了"Sample.swift",其中包含:

import Foundation

extension Sample {
    func PrettyPrint () {    
        print("\(x)")
    }
}
Run Code Online (Sandbox Code Playgroud)

这显然是我想在更大的上下文中做的简单版本,在这里我想使用Swift文件通过添加"PrettyPrint"函数来扩展"Sample".

..框架构建没有错误,但框架功能"PrettyPrint"对于调用应用程序是不可见的.调用框架的应用程序代码如:

import Foundation
import TestKit

let  sample = Sample()
sample.PrettyPrint()
Run Code Online (Sandbox Code Playgroud)

使用"sample.PrettyPrint()"失败:"Sample"类型的值没有成员'PrettyPrint'

为什么这会失败?并且是否可以做的工作?

额外信息:如果我从框架中删除文件"Sample.swift"并将其放入调用框架的应用程序,则"Sample"类成功扩展并且"sample.PrettyPrint()"按预期工作(打印" 99" ).

frameworks objective-c swift2

17
推荐指数
1
解决办法
8617
查看次数

可以在 Swift `struct` 中设置“计算常量”吗?

为了方便命名常量,我想在 Swift 中执行以下操作(我的真实案例不太简单),以便我可以IntegerConstants.SIX在以后的代码中参考。但是,SIX不能给出一个值,因为ONETWO直到没有价值struct已被初始化..的有点“第二十二条军规”

struct IntegerConstants {
   let ONE = 1.0
   let TWO = 2.0
   let SIX = (ONE + TWO) * TWO
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者创建一个GROUP.VALUE我尚未发现的形式为“ ”的命名常量的等效方法?

swift

5
推荐指数
1
解决办法
1189
查看次数

如何在Swift类扩展中创建"静态"?

在这里的几个地方,有人建议在扩展名中使用计算属性NSDate可能是通过a获取日期的字符串版本的好方法NSDateFormatter,如下所示:

extension NSDate {
    public var UTC : String {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
        formatter.timeZone = NSTimeZone(abbreviation: "UTC")
        return formatter.stringFromDate(self)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,分配a NSDateFormatter很昂贵,建议创建一次并缓存它们.上面的代码创建了NSDateFormatter每次格式化日期时,我想知道是否有一种方法可以NSDateFormatter在扩展内部创建一次以供重用?

显然,我可以在扩展之外创建它一次,但这似乎打败了表征类的封装.

我想起了:https://xkcd.com/1179/ !!

date nsdateformatter swift

4
推荐指数
1
解决办法
2093
查看次数

标签 统计

swift ×2

date ×1

frameworks ×1

nsdateformatter ×1

objective-c ×1

swift2 ×1