小编jjo*_*son的帖子

避免嵌套try catch块的模式?

考虑一种情况,我有三种(或更多)方法执行计算,每种方法都可能因异常而失败.为了尝试每次计算,直到我们找到一个成功,我一直在做以下事情:

double val;

try { val = calc1(); }
catch (Calc1Exception e1)
{ 
    try { val = calc2(); }
    catch (Calc2Exception e2)
    {
        try { val = calc3(); }
        catch (Calc3Exception e3)
        {
            throw new NoCalcsWorkedException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何可接受的模式以更好的方式实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种方法可以更普遍地执行此操作(即,无需为我想要使用的每个方法编写辅助方法)?我已经考虑过使用泛型编写一个静态方法,它在try/catch中包装任何给定的方法,并在失败时返回null,但我不确定如何解决这个问题.有任何想法吗?

c# monads design-patterns try-catch

112
推荐指数
7
解决办法
2万
查看次数

丢失了用于签署android apk的私钥.可以将应用程序发布到Android Market吗?

我刚刚完成了对公司Android应用程序的一些更新,只是意识到他们不再拥有用于签署发布到Android Market的原始版本的私钥.如果我理解正确,这意味着这些更改无法作为原始应用程序的更新发布.我认为最好的选择是将原始应用程序从市场中拉出来(它没有很多下载或评论)并重新发布使用新密钥签名的应用程序.但是,我担心Android Market可能不允许发布与已发布的应用程序几乎完全相同的应用程序(例如,同名,相同图标,大多数功能相同等).

以前有没有人遇到这种情况?谷歌是否允许您作为单独的应用程序重新发布到Android Market?

android code-signing google-play

25
推荐指数
2
解决办法
2万
查看次数

如何使用 Swift Package Manager 将 SwiftLint 与 iOS 应用程序集成?

我正在 Xcode 11 (beta 5) 中创建一个新的 iOS 应用程序,我想尝试使用 Swift Package Manager 而不是 CocoaPods 来管理依赖项。

使用 SwiftLint 和 CocoaPods 时的一个常见模式是添加 SwiftLint 作为依赖项,然后添加一个构建阶段来执行${PODS_ROOT}/SwiftLint/swiftlint;这样,所有开发人员最终都会使用相同版本的 SwiftLint。

如果我尝试在 Xcode 中添加 SwiftLint 作为 SwiftPM 依赖项,我需要的可执行目标将被禁用:

添加包截图

我可以通过创建一个Package.swift没有产品或目标的虚拟对象并swift run swiftlint在我的构建阶段运行来伪造它,但感觉很奇怪:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "dummy-package",
    products: [],
    dependencies: [
        .package(url: "https://github.com/realm/SwiftLint.git", from: "0.34.0")
    ],
    targets: []
)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不创建虚拟包的情况下做到这一点?或者 Swift 包管理器只是不适合这个特定用例的工具?

ios swift-package-manager swiftlint xcode11

17
推荐指数
2
解决办法
5322
查看次数

Swift 2.0协议扩展和Java/C#抽象类之间有区别吗?

通过在Swift 2.0中添加协议扩展,似乎协议基本上已成为Java/C#抽象类.我能看到的唯一区别是抽象类限制为单继承,而Swift类型可以符合任意数量的协议.

这是对Swift 2.0协议的正确理解,还是存在其他差异?

protocols swift swift2

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

在后台下载期间不会调用我的NSURLSessionDelegate方法

我正在尝试设置下载使用NSURLSession它将在后台继续.我有一个单独的类DownloadManager,它构建NSURLSession并启动下载任务,如下所示:

- (id)init
{
    self = [super init];
    if (self) {
        self.queue = [[NSOperationQueue alloc] init];
        self.queue.maxConcurrentOperationCount = 1;

        // Initialize the background session.
        self.session = [self backgroundSession];
    }
    return self;
}

- (NSURLSession *)backgroundSession
{
    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.mycompany.myapp.BackgroundSession"];
        session = [NSURLSession sessionWithConfiguration:sessionConfiguration
                                                delegate:self
                                           delegateQueue:self.queue];
    });
    return session;
}

- (void)startDownload:(Download *)download
{
    NSURL *remoteURL = ...
    NSURLSessionDownloadTask *task = [self.session downloadTaskWithURL:remoteURL]; …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c ios ios7 nsurlsession

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

当我用独角兽开始我的rails应用程序时出现奇怪的错误

当我尝试用独角兽启动我的rails应用程序时,我收到了这个非常奇怪的错误.谁看过这个吗?

[root@Web01 mp_app]# unicorn_rails -c config/unicorn.rb -E production -D -d
{:daemonize=>true,
 :app=>
  #<Proc:0x00002b14fff8c890@/usr/local/lib/ruby/gems/1.8/gems/unicorn-4.0.1/bin/unicorn_rails:135>,
 :unicorn_options=>{:config_file=>"config/unicorn.rb", :listeners=>[]}}
Exception `Errno::ENOENT' at /usr/local/lib/ruby/1.8/fileutils.rb:243 - No such file or directory - tmp/cache
Exception `Errno::EEXIST' at /usr/local/lib/ruby/1.8/fileutils.rb:243 - File exists - .
Exception `EOFError' at /usr/local/lib/ruby/gems/1.8/gems/unicorn-4.0.1/lib/unicorn/launcher.rb:46 - end of file reached
Run Code Online (Sandbox Code Playgroud)

编辑

感谢jdeseno,我已经通过自己创建tmp文件夹解决了这个问题.但是现在我得到了一个不同的错误:

{:daemonize=>true,
 :app=>
  #<Proc:0x00002b90ee5098a8@/usr/local/lib/ruby/gems/1.8/gems/unicorn-4.1.1/bin/unicorn_rails:135>,
 :unicorn_options=>{:config_file=>"config/unicorn.rb", :listeners=>[]}}
Exception `EOFError' at /usr/local/lib/ruby/gems/1.8/gems/unicorn-4.1.1/lib/unicorn/launcher.rb:46 - end of file reached
Run Code Online (Sandbox Code Playgroud)

有关此错误的任何想法?错误消息没有提供太多帮助.

ruby ruby-on-rails nginx unicorn

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

通过自动调整子视图动画UIView帧大小更改

我有一个包含两个子视图的UIView.我想用动画改变superview的帧大小,并让子视图的大小根据其自动大小的掩码而改变.

[UIView beginAnimations:@"Resize" context:nil];
[UIView setAnimationDuration:1.0];
CGRect frame = self.myView.frame;
frame.size.height += 30.0;
self.myView.frame = frame;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

视图self.myView按预期调整大小超过1秒,但子视图会立即调整大小.有谁知道为什么会发生这种情况以及我如何让子视图动画调整大小?

从我的谷歌搜索,我认为它可能与contentMode财产有关.不幸的是,我不清楚该财产的作用.任何帮助将非常感激.

iphone animation subview ios

7
推荐指数
2
解决办法
1万
查看次数

从付费应用切换到具有自动续订订阅的免费应用

我有一个 5 美元的应用程序。我想对此进行更改,以便该应用程序免费,并且用户必须购买自动续订订阅才能使用它。我知道如何实现自动续订订阅,但问题是处理已经以 5 美元购买该应用程序的用户;我想继续让这些用户无需订阅即可使用我的应用。

问题在于,出于隐私原因,我无法在我的服务器上存储任何识别信息,这些信息将我的应用程序的帐户链接到特定的人(甚至不是 UIDID)。我可以做的是保持其链接到UIDIDs订阅购买收据,这将让我知道如果用户已订阅一个单独的数据库表。

所以我的问题是,当我的应用程序价格为 5 美元时,我如何识别获得我的应用程序的用户?我知道有一种方法可以恢复应用程序内购买的收据,但是有没有办法检索我可以存储在我的服务器上的 5 美元应用程序的初始购买收据?

穷人的解决方案只是将我服务器中的所有当前 UIDID(即已支付 5 美元的人的 UIDID)标记为已付费,但是如果他们想从不同的设备使用我的应用程序,他们将不得不购买订阅。

iphone subscription in-app-purchase ios auto-renewing

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

具有> 64位种子的伪随机数发生器,用于52卡牌组随机播放

在编写卡片洗牌算法时,我意识到有52个!〜= 2 ^ 225可能发生的混乱.鉴于此,在我看来,基于具有标准32位或64位种子的PRNG的任何混洗算法将仅能够产生所有可能的混洗的子集.由于我的平台只有一个32位种子PRNG(只是POSIX srandom()/ random()函数),我想知道是否有任何方法可以创造性地使用它来创建一个能够产生任何结果的混洗算法.如果没有,有没有人知道PRNG算法能够使用种子,它是几个32位整数的组合,我可以自己实现?

random shuffle

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

自定义Rx运算符仅在存在最近值时才进行限制

我正在尝试创建一个看起来非常有用的Rx运算符,但令我惊讶的是在Stackoverflow上没有发现任何精确匹配的问题.我想创建一个变体Throttle,如果有一段时间不活动,可立即通过值.我想象的用例是这样的:

我有一个下拉列表,当值发生变化时,它会启动Web请求.如果用户按住箭头键并快速循环显示值,我不想启动每个值的请求.但是如果我限制流,那么用户每次只需从正常方式从下拉列表中选择一个值时就必须等待节流持续时间.

因此,正常情况Throttle如下: 正常油门():

我想创建ThrottleSubsequent这样的外观: ThrottleSubsequent():

请注意,大理石1,2和6会毫不拖延地通过,因为它们各自都处于不活动状态.

我对此的尝试如下所示:

public static IObservable<TSource> ThrottleSubsequent<TSource>(this IObservable<TSource> source, TimeSpan dueTime, IScheduler scheduler)
{
    // Create a timer that resets with each new source value
    var cooldownTimer = source
        .Select(x => Observable.Interval(dueTime, scheduler)) // Each source value becomes a new timer
        .Switch(); // Switch to the most recent timer

    var cooldownWindow = source.Window(() => cooldownTimer);

    // Pass along the first value of each cooldown window immediately
    var firstAfterCooldown = cooldownWindow.SelectMany(o => …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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