小编mar*_*314的帖子

在Swift 2中使用自定义消息抛出错误/异常的最简单方法?

我想在Swift 2中做一些我以前用其他多种语言做的事情:用自定义消息抛出运行​​时异常.例如(在Java中):

throw new RuntimeException("A custom message here")
Run Code Online (Sandbox Code Playgroud)

我知道我可以抛出符合ErrorType协议的枚举类型,但我不想为我抛出的每种类型的错误定义枚举.理想情况下,我希望能够尽可能地模仿上面的例子.我研究了创建一个实现ErrorType协议的自定义类,但我甚至无法弄清楚该协议需要什么(参见文档).想法?

ios swift swift2

125
推荐指数
8
解决办法
8万
查看次数

如何在Swift中打印'catch all'异常的详细信息?

我正在更新我的代码以使用Swift,我想知道如何打印与'catch all'子句匹配的异常的错误详细信息.我稍微修改了这个Swift语言指南页面中的示例来说明我的观点:

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}
Run Code Online (Sandbox Code Playgroud)

如果我遇到意外的异常,我需要能够记录导致它的原因.

ios swift swift2

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

C#对象初始化只读集合属性

对于我的生活,我无法弄清楚下面的C#代码示例中发生了什么.测试类的集合(List)属性设置为只读,但我可以在对象初始值设定项中看似分配给它.

**编辑:修复了List'getter'的问题

using System;
using System.Collections.Generic;
using NUnit.Framework;

namespace WF4.UnitTest
{
    public class MyClass
    {
        private List<string> _strCol = new List<string> {"test1"};

        public List<string> StringCollection 
        {
            get
            {
                return _strCol;
            }
        }
    }

    [TestFixture]
    public class UnitTests
    {
        [Test]
        public void MyTest()
        {
            MyClass c = new MyClass
            {
                // huh?  this property is read only!
                StringCollection = { "test2", "test3" }
            };

            // none of these things compile (as I wouldn't expect them to)
            //c.StringCollection = { "test1", "test2" …
Run Code Online (Sandbox Code Playgroud)

c# c#-3.0 c#-4.0

16
推荐指数
2
解决办法
3058
查看次数

如何在Swift中向NSJSONSerialization.JSONObjectWithData传递任何选项

我希望在Swift(2.0)中反序列化JSON时不传递任何选项.我最初尝试过:

NSJSONSerialization.JSONObjectWithData(data, options: nil)
Run Code Online (Sandbox Code Playgroud)

但那不编译,我得到错误:

类型NSJSONReadingOptions不符合协议NilLiteralConvertible

枚举NSJSONReadingOptions没有任何"无"选项,所以如果我不想要任何这些选项,该怎么办?

ios swift swift2

15
推荐指数
2
解决办法
7669
查看次数

Node中密码存储的加密最佳实践

我正在寻找一种简单,安全的解决方案,用于使用Node存储用户的密码.我是加密新手,但一直试图通过在线研究将解决方案整合在一起.我正在寻找验证,我提出的是一个基本(不是银行,医院等)安全需求的Web应用程序的可靠解决方案.这里是:

var crypto = require('crypto');
var SALT_LENGTH = 64;
var KEY_LENGTH = 64;
var ITERATIONS = 1000;

function createHashedPassword(plainTextPassword, cb) {
    crypto.randomBytes(SALT_LENGTH, function (err, salt) {
        console.time('password-hash');
        crypto.pbkdf2(plainTextPassword, salt, ITERATIONS, KEY_LENGTH, function (err, derivedKey) {
            console.timeEnd('password-hash');
            return cb(null, {derivedKey: derivedKey, salt: salt, iterations: ITERATIONS});
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

......这是我做出的选择让我达到了这一点:

使用什么哈希算法?

基于这篇被广泛引用的文章,看起来主要的竞争者是PBKDF2,bcrypt和scrypt.我选择了PBKDF2,因为它内置了Node支持.

什么盐的大小?

这个堆栈溢出答案似乎是我能找到的最直接的答案.我仍然不太清楚为什么64字节是正确的盐大小.当我谷歌的时候,我得到一个叠层交换答案像这样,但我不知道它适用于节点的算法?在这里完全混淆,针对使用此节点功能的新手的解释将是非常棒的.

使用什么密钥长度?

再一次,我的选择主要取决于上面的相同答案,但我对"为什么"的基本知识一模糊.答案是"生成小于输入的密钥是浪费,所以至少要使用64个字节".咦?再一次,实际的解释会有所帮助.

要使用多少次迭代?

对于这个问题,我根据这个堆栈交换答案做出了我的选择.我不太了解它,但我确实认为该算法大约需要8ms.所以,正如你所看到的那样,我将定时器放在函数上,并且我调整了迭代次数,以便在我的机器上进行调整.

谢谢!

passwords cryptography salt pbkdf2 node.js

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

Swift:方法重载只在返回类型上有所不同

我一直在看Swift类,其中定义了两种方法,它们的返回类型不同.我不习惯使用允许这种语言的语言(Java,C#等),所以我去寻找描述它如何在Swift中工作的文档.我在任何地方都找不到任何东西.我本来期望在Swift书中有关于它的整个部分.这记录在哪里?

这是我正在谈论的一个例子(我正在使用Swift 2,FWIW):

class MyClass {
    subscript(key: Int) -> Int {
        return 1
    }

    subscript(key: Int) -> String {
        return "hi"
    }

    func getSomething() -> Int {
        return 2
    }

    func getSomething() -> String {
        return "hey"
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

    let obj = MyClass()    

    //let x = obj[99]
    // Doesn't compile: "Multiple candidates fail to match based on result type"

    let result1: String = obj[123]
    print("result1 \(result1)")  // prints "result1 hi"

    let result2: Int = obj[123]
    print("result2 \(result2)") // prints …
Run Code Online (Sandbox Code Playgroud)

ios swift swift2

6
推荐指数
2
解决办法
3496
查看次数

为什么我不能通过在Swift中调用静态函数来初始化静态变量?

据我所知,从Xcode 6.3/Swift 1.2开始,我可以在类中使用静态变量和方法.但是,当我尝试通过调用静态函数初始化静态变量时,编译器不喜欢它(我在下面的示例中得到错误'使用未解析的标识符getDefaultString').这是一个演示我的问题的片段:

import Foundation

public class Settings {
    private static var _bundle = NSBundle.mainBundle()
    static func getDefaultString(key: String) -> String {
        return _bundle.objectForInfoDictionaryKey(key) as! String
    }

    private static var _server = getDefaultString("DefaultServer")
    public class var server: String {
        get { return _server }
        set { _server = newValue }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能帮我理解为什么我不能这样做吗?

ios swift

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

在Swift 2中为一个类添加'for ... in'支持

对于早期版本的Swift,这个问题已经得到了解答,但是我想知道如何在Swift 2的类中添加"for ... in"支持.看起来在新版本的Swift中已经有了足够的变化来制作答案明显不同.例如,您现在应该使用AnyGenerator协议?

ios swift swift2

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

标签 统计

ios ×6

swift ×6

swift2 ×5

c# ×1

c#-3.0 ×1

c#-4.0 ×1

cryptography ×1

node.js ×1

passwords ×1

pbkdf2 ×1

salt ×1