如何在Swift 3.0中实现方法调配?
我已经阅读了关于它的nshipster文章,但是在这个代码的块中
struct Static {
static var token: dispatch_once_t = 0
}
Run Code Online (Sandbox Code Playgroud)
编译器给我一个错误
dispatch_once_t在Swift中不可用:改为使用延迟初始化的全局变量
我有这样的代码
func request(request: URLRequest) -> AnyPublisher<Data, Error> {
return Just(request)
.flatMap { request in
RequestManager.request(request) // returns AnyPublisher<Data, Error>
}
.eraseToAnyPublisher()
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
实例方法 flatMap(maxPublishers:_:) 要求类型 Just.Failure(又名 Never)和 Error 是等价的
很明显,因为Justhas NeverasFailure和.flatMaprequires Erroras Failure,所以Never!=Error
我看到两种方法:
使用正确的Publisher 而不是Just,但我没有找到合适的人选。
使用诸如.mapError, 之类的运算符.mapError { $0 as Error },但我不确定这是个好主意。
任何想法如何处理它?
更新:
使用更有意义
.setFailureType(to: Error.self)
Run Code Online (Sandbox Code Playgroud)
或者
.mapError { $0 as Error }
Run Code Online (Sandbox Code Playgroud) 当用户选择某些选项时,我想设置导航标题 Picker
这是我的选择模型:
enum AppIcon: CaseIterable, Identifiable {
var id: Self {
return self
}
case `default`
case ethereum
case litecoin
var name: String {
switch self {
case .default:
return "Bitcoin"
case .ethereum:
return "Ethereum"
case .litecoin:
return "Litecoin"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点
struct ContentView: View {
@State var icon: AppIcon = .default
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $icon, label: Text("Icon")) {
ForEach(AppIcon.allCases) { icon in
Text(icon.name).tag(icon)
}
}
}
}
.navigationBarTitle("Appearance") …Run Code Online (Sandbox Code Playgroud) 如何在 SwiftUI 中动态更改应用程序的本地化?
我认为我们可以使用下面的代码,但我们应该找到 SwiftUI 方法。
func localized(_ lang:String) -> String {
let path = Bundle.main.path(forResource: lang, ofType: "lproj")
let bundle = Bundle(path: path!)
return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}}
Run Code Online (Sandbox Code Playgroud) 众所周知,通常发布者是结构体。如果是一个类会发生什么变化?
假设我们有 1 个发布者发出 1 个值和 2 个订阅者订阅它。
let p1 = Just(20)
let s1 = p1.print().sink { _ in }
let s2 = p1.print().sink { _ in }
// s1 - receive value: (20)
// s2 - receive value: (20)
Run Code Online (Sandbox Code Playgroud)
在打印日志中,我们可以看到两个订阅者都获得了值 (20)。
如果我们打开 share() 操作符的文档,我们会看到
share() - 将发布者作为类实例返回。
所以它只是将发布者的语义从值更改为引用。在我们的示例中,我们不将p1发布者传递给任何函数或分配给任何对象,这就是为什么对我来说发布者是结构体或类没有区别的原因......但是如果我添加share()操作符行为会有所不同,s2不会获得价值.
let p1 = Just(20).share() // !
let s1 = p1.print().sink { _ in }
let s2 = p1.print().sink { _ in }
// s1 - …Run Code Online (Sandbox Code Playgroud) 我想添加视频(或gif)的背景视图,如应用程序"Uber"我想在我的应用程序中使用视频背景视图很长一段时间.
我想知道这些问题的答案:
注册表单的屏幕截图

我想做这样的事情:
enum WeekDay {
case Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
class Person: Object {
dynamic var birthday: WeekDay? = .Monday
dynamic var id: String? = nil
dynamic var birthdayRaw: String? = nil
override static func primaryKey() -> String? {
return "id"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
属性不能标记为动态,因为其类型无法在Objective-C中表示
我怎么解决这个问题?谢谢你的帮助.
我想要一个编号列表,其中每一行都有一个数字。
像这样

但是我在List初始化器中看不到正确的API
目前,我看到了这种解决方法
var persons = ["Boris", "Anna", "Tom"]
// MARK: - Body
func body(props: Props) -> some View {
List(persons.indices, id: \.self) { index in
Text("\(index) \(self.persons[index])")
}
}
Run Code Online (Sandbox Code Playgroud)