小编Bry*_*hen的帖子

我真的必须覆盖哈希只因为我重写isEqual:为我的子类?

Apple的文档说如果我覆盖,isEqual:那么我必须重写hash以确保两个被认为相等的对象的哈希值应相同isEqual:

然后我读了关于哈希的文档,下面是它的一部分:

因此,散列方法必须不依赖于任何对象的内部状态信息,或者必须确保在对象位于集合中时对象的内部状态信息不会更改.

我的自定义MyClass类有几个成员,其是int和布尔和NSArray中包含MyClass的数量,我想MyClass的两个实例,如果所有成员都是平等是平等的.

我对如何覆盖isEqual:但没有问题hash.在我的理解中,hash应该通过使用诸如XOR或旋转移位之类的位操作来组合成员的散列值来计算散列值.

问题是如何以hash满足Apple在上面提到的要求的方式实施.Docs说哈希值不应该依赖于内部状态(即成员),但我发现我必须使用它们来计算值.

或者甚至我真的需要实现它吗?因为我确定我不会将此类用作NSDictionary的键,这是我知道使用位置的唯一方法hash.有没有其他地方hash使用,我应该关心它?

iphone hash ios

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

如何调用模糊方法?

鉴于此代码

extension Array {
    func filter(includeElement: (T) -> Bool) -> T[] {
        var ret = T[]()
        for e in self {
            if includeElement(e) {
                ret += e
            }
        }
        return ret
    }
}

var a = [1,2]
var b = a.filter() {i in print(i); return true}
Run Code Online (Sandbox Code Playgroud)

它无法编译错误消息

error: ambiguous use of 'filter'
var b = a.filter() {i in print(i); return true}
        ^
Swift.Array<T>:84:8: note: found this candidate
  func filter(includeElement: (T) -> Bool) -> Array<T>
       ^
<REPL>:30:10: note: found this candidate …
Run Code Online (Sandbox Code Playgroud)

swift xcode6

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

@abstract 类 - jsDoc

你好 :) 我知道可以用 jsDoc 做这样的事情:

/**
 * @class
 */
function Implementator() {
    if (this instanceof Implementator) {
        throw new Error('Abstract classes cannot be instantiated.');
    }
}



/**
 * @abstract
 */
Implementator.prototype.react = function() {
    throw new Error('Not implemented.');
};
Run Code Online (Sandbox Code Playgroud)

这里只有一个方法被标记为抽象实体。

但是我们可以像这样将@abstract 标记添加到Implementator 类(函数构造函数)本身:

/**
 * @class 
 * @abstract
 */
function Implementator() {
    if (this instanceof Implementator) {
        throw new Error('Abstract classes cannot be instantiated.');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,我知道这是可行的,事实上,jsDoc 文档生成器将(抽象)添加到类的名称中。但是可以在没有任何并发​​症的情况下添加吗?这样的符号是否仍然被视为遵守 jsDoc 约定?

javascript jsdoc

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

Webpack简单地将一堆Pug模板编译为HTML

我开始使用webpack,但有一件事我无法解决的问题是如何获取一个文件夹(带有可能的嵌套文件夹),完整的.pug模板,只需将它们编译为静态html并将它们放在输出文件夹中,为源模板文件夹中的每个输出html文件维护任何嵌套文件夹结构...

我不想手动指定每个单独的.pug文件,我绝对不希望webpack尝试将.pugs解析为JS然后尝试在pug文件中要求/导入任何imgs/fonts等然后抱怨关于它,我只是在一个基本的,静态的1:1编译,pug文件,html文件中.为什么这么难?

javascript webpack pug

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

java迭代器背后的概念是什么?

我正在研究java iterator接口,无法理解为什么它的设计是这样的.

为什么Java的迭代器使用hasNext,并next代替它们合并成一个方法?

这是java迭代器的典型用法

Iterator iter = //iterator from a list
while(iter.hasNext()){
    Object obj = iter.next();
    // do something to obj
}
Run Code Online (Sandbox Code Playgroud)

为什么不

Iterator iter = //iterator from a list
Object obj = null;
try {
    while(true){
        obj = iter.next();
        // do something to obj
    }
} catch (NoSuchElementException e) {}
Run Code Online (Sandbox Code Playgroud)

很明显,这种方法看起来很丑陋,但是如果next返回null到达end而不是抛出异常会发生什么?比代码可以简化为

Iterator iter = //iterator from a list
Object obj = null;
while((obj = iter.next()) != null){
    // do something to obj …
Run Code Online (Sandbox Code Playgroud)

java iterator concept

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

动态改变目标C中像元的高度

我创建了一个具有表视图的应用程序。在每个单元格中使用一个视图和一个标签。但是,如果我在(!cell)代码中创建视图和单元格,它将返回空单元格;如果删除(!cell)条件,它将显示数据,但不会采用动态高度。谁能帮帮我吗。

- (void)viewDidLoad{ 
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", LanguageFile]];

NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:DataPath];

self.reloadArray = [tempDict objectForKey:@"Rows"];}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [self.reloadArray count];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get data for the current row
  NSString *textData = [reloadArray objectAtIndex:indexPath.section]

CGFloat dataTextHeight = [self getLabelHeightForIndex:textData];

    if(dataTextHeight < 44)
    {
        dataTextHeight = 44;
    }

    return dataTextHeight;
}

-(CGFloat)getLabelHeightForIndex:(NSString *)string
{
CGSize maximumSize = …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview ios

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

包含头文件时到底发生了什么?

我有两个疑问:

  1. 头文件实际包含什么?所有的函数定义还是只有原型声明?
  2. 当我包含头文件时会发生什么?是否将头文件的所有内容附加到我的代码中?或者是否将头文件的特定(或全部)内容加载到内存中并根据我的代码调用函数?

c c-preprocessor

4
推荐指数
2
解决办法
3779
查看次数

在Swift应用程序中安装Realm

我正在尝试将Realm添加到我用swift编写的应用程序中.我按照教程,似乎无法让它工作.最大的问题是当我尝试导入Realm时,我No such module 'Realm' 不知道还有什么可以尝试.你可以在下面看到我的努力.

您可以在此处查看说明:http://realm.io/docs/cocoa/0.85.0/#swft

我还复制了以下说明:

由于当前缺乏适当的Swift依赖管理基础结构,因此在项目中使用Realm需要执行以下步骤:

  1. 通过打开终端,进入顶层项目目录,然后输入命令git submodule add git@github.com:realm/realm-cocoa.git,将Realm添加为子模块
  2. 打开realm-cocoa文件夹,将Realm.xcodeproj拖到Xcode项目的文件导航器中.
  3. 在Xcode中,通过单击蓝色项目图标导航到目标配置窗口,然后在侧栏的"目标"部分下选择应用程序目标.
  4. 在该窗口顶部的选项卡栏中,打开"构建阶段"面板.
  5. 展开"Target Dependencies"gorup,并添加Realm的iOS框架.
  6. 展开"Link Binary with Libraries"组,添加Realm的iOS框架以及libc ++.dylib.
  7. 单击面板左上角的+按钮,然后选择"新建复制文件阶段".将此新阶段重命名为"Copy Frameworks",将"Destination"设置为"Frameworks",然后添加Realm.framework.
  8. 将realm-cocoa/Realm/Swift/RLMSupport.swift中的文件拖到Xcode项目的文件导航器中,取消选中"如果需要,复制项目"复选框.

以下是我的项目中的样子:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

realm ios swift

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

RxSwift过滤器变量数组

您好我正在尝试了解RxSwift库以编写更好的功能代码.

目前我陷入了一个非常基本的问题.可以说我得到了这种类型的变量Variable<[CiteModel?]>:

var allCites: Variable<[CiteModel?]> = Variable([])
var shownCites: Variable<[CiteModel?]> = Variable([])
Run Code Online (Sandbox Code Playgroud)

现在我想过滤allCites包含特定文本的数组中的所有引用并将它们添加到shownCites.

这是我试过,但它并没有编译,因为在我的过滤器块$0[CiteModel?] 不是 CiteModel?我所期望的那样.你能解释一下我做错了什么吗?

private func filterCitesByQuery(query: String) {
    self.shownCites = self.allCites.asObservable().filter {
        $0?.cite.containsString(query)
    }
}
Run Code Online (Sandbox Code Playgroud)

执行上述代码时出错:

Cannot assign value of type 'Observable<[CiteModel?]>' (aka 'Observable<Array<Optional<CiteModel>>>') to type 'Variable<[CiteModel?]>' (aka 'Variable<Array<Optional<CiteModel>>>')
Run Code Online (Sandbox Code Playgroud)

functional-programming ios swift rx-swift

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

如何正确找出lambda的返回类型

基本上如何使以下代码编译?

我知道它失败了,因为编译器试图评估类似的东西,([](int &i){})(0)但是如何解决该问题呢?

template <class TElement>
struct foo {
    TElement _e;
    foo(TElement e) : _e(e){}
    template <class Lambda>
    void bar(Lambda f) {
        using TResult = decltype(std::declval<Lambda>()(std::declval<TElement>()));
    }
};

int main() {

    foo<int>(0).bar([](int i){}); // compile
    foo<int>(0).bar([](int &&i){}); // compile
    foo<int>(0).bar([](int const &i){}); // compile
    foo<int>(0).bar([](int &i){}); // failed

}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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