小编Yar*_*sim的帖子

如何在同一框架内访问Objective-C中的内部Swift类?

致力于混合框架.在Obj-C文件中导入,但内部类不可见,只有公共类.

文档清楚地说明Swift和Obj-C之间应该有内部分支:

将Swift导入Objective-C
要在与Objective-C代码相同的框架目标中导入一组Swift文件,您不需要将任何内容导入到框架的伞形头中.相反,将您的Swift代码的Xcode生成的头文件导入到您想要使用Swift代码的任何Objective-C .m文件中.因为框架目标的生成标头是框架公共接口的一部分,所以只有标记为public修饰符的声明才会出现在框架目标的生成标头中.您仍然可以在框架的Objective-C部分中使用使用内部修饰符标记的Swift方法和属性,只要它们在从Objective-C类继承的类中声明即可.有关访问级别修饰符的更多信息,请参阅 Swift编程语言(Swift 2)访问控制.

代码示例(使用框架创建新项目)

// SwiftObject.swift

public class SwiftObject: NSObject {
    public class func doSomething() {}
}

internal class YetAnotherSwiftObject: NSObject {
    internal class func doSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
// SomeObject.m file

@implementation SomeObject

- (void)someMethod {
    [SwiftObject doSomething];
}

- (void)someOtherMethod {
    [YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}

@end
Run Code Online (Sandbox Code Playgroud)

frameworks access-modifiers objective-c ios swift

12
推荐指数
2
解决办法
3929
查看次数

将不可用的初始化程序委托给可用的初始化程序

编辑

感谢@Airspeed Velocity找到了一个简单的解决方案,因为这是从JSON解析的.允许初始化程序采用AnyObject?并默认为Unknown(或Invalid):

init(value: AnyObject?) {
  if let value = value as? Int
    ,let result = Result(rawValue: value) {
      self = result
  } else {
    self = .Unknown
  }
}
Run Code Online (Sandbox Code Playgroud)

//

原版的

我用一个Unknown案例实现了一个枚举:

enum Result: Int {
  case Success
  case Failure
  case Foo
  case Bar
  case FooBar
  case FooFoo
  ...
  case Unknown = -1
}
Run Code Online (Sandbox Code Playgroud)

我想创建另一个初始化程序,它接受枚举无法识别的情况Int并返回Unknown:

init(value: Int) {
  self.init(rawValue: value)
  if self == nil { // Complication …
Run Code Online (Sandbox Code Playgroud)

enums initializer swift

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

Switch语句忽略多个案例的Where子句

请考虑以下情形:

enum XYZ {
  case X
  case Y
  case Z
}

let x = XYZ.X

switch x {
case .X, .Y where false:
  println("x or y")
case .Z:
  println("z")
default:
  println("default")
  break
}
Run Code Online (Sandbox Code Playgroud)

即使该where条款是false,该片段也会打印出来x or y.

没有发现任何提及它.任何人都知道如何重构这个而不重复第一种情况下的代码?

fallthough现在使用但该where条款现在重复

switch-statement swift

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