小编Mic*_*sky的帖子

解释为什么NSURL会在nil上抛出错误

如果传递了nil或者一些错误,Objective-C中的所有类的大多数都会返回nil,但NSURL会引发异常.具体来说,该方法[NSURL fileURLWithPath].

记录: "为此参数传递nil会产生异常."

但是,任何人都可以解释苹果会抛出异常而不是返回零吗?

objective-c ios

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

在 iOS 上保留 Firebase 匿名登录

我不希望我的用户必须创建帐户,但我想记住他们在会话之间的身份。我希望创建一个匿名登录并将令牌存储在 NSUserDefaults 中。据我所知,令牌将过期,并且我无法刷新此令牌。

我应该如何保持匿名登录?

我的下一个选择是使用电子邮件/密码身份验证并使用 UUID 生成假电子邮件。然后将假电子邮件/密码存储在用户的设备上。

ios firebase firebase-security

5
推荐指数
0
解决办法
2475
查看次数

在队列上运行空块的开销是多少

我意识到我正在排队调用空方法的很多块.在调试器中,当真正所有块都为空时,它看起来很多.

空块有没有真正的性能影响?

ios

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

在 Swift 中使用类型时如何排除 C 枚举情况

在我的 C 代码中,我通常在末尾有一个名为 count 的枚举情况。但是当我在 Swift 中使用枚举时,它也将具有该值,我必须在 switch 语句中处理该值。

导入 Swift 时是否可以使用某些属性来排除情况?

c enums swift

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

SwiftUI 不会更新第二个 NavigationLink 目的地

我有一个列表,其中包含推送视图的行。该视图有另一个列表,它推送另一个视图。原来的List,第一个推送的List会随着数据的变化而更新。但是,推送时最后一个视图不会更新。当我向后滑动视图不再更新时,即使它曾经更新过。

HomeView > UserView > ItemView

User 和 Item 是可识别的结构。我试过让它们 Hashable 并使用id: \.self,但这似乎也不起作用。

class App: ObservableObject {
    @Published var users = [User]()
}

struct HomeView {

    @EnvironmentObject var app: App

    var body {
        List {
            Section {
                ForEach(app.users) { user in
                    NavigationLink(destination: UserView(user: user)) {
                        Text(user.name)
                    }
                }
            }
        }
    }

}

// Updates fine when `app.users` updates
// Stops updating after going back from ItemView
struct UserView {

    let user: User

    var body {
        List {
            Section …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

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

如何重置激活的远程配置值

使用 Firebase,在我获取并激活我的远程配置值后,调用configValue(forKey key: String?)会给我来自远程源的值。我知道我可以调用func configValue(forKey key: String?, source: RemoteConfigSource)defaultValue(forKey key: String?)获取默认值。但是,如何重置激活的数据,以便调用configValue再次为我提供默认值?

此外,持久化的激活值是否会被清除?

firebase swift firebase-remote-config

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

如何使用 swift combine 异步处理一系列任务

我有一个发布者,它接受网络调用并返回一组 ID。我现在需要为每个 ID 调用另一个网络调用来获取我的所有数据。我希望最终发布者拥有结果对象。

第一个网络结果:

"user": {
   "id": 0,
   "items": [1, 2, 3, 4, 5]
}
Run Code Online (Sandbox Code Playgroud)

最终对象:

struct User {
    let id: Int
    let items: [Item]
    ... other fields ...
}
struct Item {
    let id: Int
    ... other fields ...
}
Run Code Online (Sandbox Code Playgroud)

处理多个网络调用:

userPublisher.flatMap { user in
    let itemIDs = user.items
    return Future<[Item], Never>() { fulfill in
        ... OperationQueue of network requests ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想并行执行网络请求,因为它们不相互依赖。我不确定 Future 是否就在这里,但我想我会有代码来执行 DispatchGroup 或 OperationQueue 并在它们全部完成时完成。是否有更多的联合方式来做到这一点?

是否有将一个流拆分为多个并行流并将这些流连接在一起的概念?

swift combine

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

tail -f从整个文件开始

我想关注一个文件,但tail -f始终以最后10行开头。有没有办法输出整个文件然后跟随?

我的目标是查找日志中所有出现的字符串,例如tail -f streaming_log | grep "string"。而且还包括所有以前的行。

我知道我可以做,tail -f -n 10000 file但是我不想先数行。

tail

3
推荐指数
1
解决办法
424
查看次数

如果我的 DispatchGroup 永远不会完成会发生什么

我有许多异步任务需要全部完成才能继续,所以我正在使用 DispatchGroup。但是,我能够判断其中一项任务是否提前失败,并且我通常会调用完成处理程序。

如果我通过调用完成处理程序离开函数的作用域,DispatchGroup 会发生什么?

内存是永久分配的吗?如果 leave 最终被调用足够多次(可能是由于错误),通知块是否仍然可以被调用?

例子:

func example(completion: @escaping (Bool) - Void) {
    let group = DispatchGroup()

    group.enter()
    asyncFunction1 {
        if result == false {
            completion(false)
        } else {
            group.leave()
        }
    }

    group.enter()
    asyncFunction2 { result in
        if result == true {
            group.leave()
        }
    }

    group.notify(queue: .main) {
        completion(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我有两个异步函数。第一个函数可能会调用completion(false),而第二个函数仅leave在成功时调用。虽然它可能不是最好的代码示例,但这些条件是可能的。通知块会发生什么?

grand-central-dispatch ios swift

3
推荐指数
1
解决办法
2035
查看次数

如何快速导入 c 枚举

当我将我的 c 枚举导入 swift 时,它变成了一个结构并丢失了案例。我如何才能将其作为枚举快速导入?

代码:

enum Foo {
    A = 1,
    B = 2
};
Run Code Online (Sandbox Code Playgroud)

生成的斯威夫特:

public struct Foo : Equatable, RawRepresentable {

    public init(_ rawValue: UInt32)

    public init(rawValue: UInt32)

    public var rawValue: UInt32
}
Run Code Online (Sandbox Code Playgroud)

预期的斯威夫特:

enum Foo: UInt32 {
    case A = 1,
    case B = 2
}
Run Code Online (Sandbox Code Playgroud)

c swift

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