相关疑难解决方法(0)

Swift中的多类型约束

假设我有这些协议:

protocol SomeProtocol {

}

protocol SomeOtherProtocol {

}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要一个采用泛型类型的函数,但该类型必须符合SomeProtocol我可以做的:

func someFunc<T: SomeProtocol>(arg: T) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

但有没有办法为多个协议添加类型约束?

func bothFunc<T: SomeProtocol | SomeOtherProtocol>(arg: T) {

}
Run Code Online (Sandbox Code Playgroud)

类似的东西使用逗号,但在这种情况下,它会启动一个不同类型的声明.这是我尝试过的.

<T: SomeProtocol | SomeOtherProtocol>
<T: SomeProtocol , SomeOtherProtocol>
<T: SomeProtocol : SomeOtherProtocol>
Run Code Online (Sandbox Code Playgroud)

swift

119
推荐指数
4
解决办法
3万
查看次数

带协议的Swift实例变量

我必须将以下几行Objective-c代码翻译成swift.这是来自Objective-c JSONModel-Framework的示例,其中FrameworkOptional提供的协议应用于类型的实例变量NSString.我发现了一个相关的帖子,但我没有设法实现它.随着我的MYModel.swift实现Xcode抱怨Cannot specialize non-generic type NSString

谢谢你的帮助!

MYModel.swift

@objc(MYModel) public class MYModel : JSONModel {
   ...
   public var name : NSString<Optional>
   ...
}
Run Code Online (Sandbox Code Playgroud)

MYModel.h

@interface MYModel : JSONModel
...
@property (strong, nonatomic) NSString<Optional>* name; 
...
Run Code Online (Sandbox Code Playgroud)

JSONModel.h

...
/**
 * Protocol for defining optional properties in a JSON Model class. Use like below to define 
 * model properties that are not required to have values in the JSON input:
 * …
Run Code Online (Sandbox Code Playgroud)

objective-c ios jsonmodel swift

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

什么是Swift相当于声明`typedef SomeClass <SomeProtocol> MyType`?

我目前正在一个主要是Objective-C的项目中编写一些Swift代码.在我们的ObjC代码中,我们有一个声明的标头typedef GPUImageOutput<GPUImageInput> MyFilter;.然后我们可以声明一个只能是GPUImageOutput实现的子类的@property GPUImageInput.

(注:GPUImageOutputGPUImageInput是不是我定义的;它们是部分GPUImage库)

我们的Swift代码似乎没有认识到这一点,即使标题在我们的桥接标题中是#imported.我试图在Swift中复制声明,但这些都不是正确的语法:
typealias MyFilter = GPUImageOutput, GPUImageInput
typealias MyFilter = GPUImageOutput : GPUImageInput

objective-c ios gpuimage swift

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

标签 统计

swift ×3

ios ×2

objective-c ×2

gpuimage ×1

jsonmodel ×1