小编coj*_*joj的帖子

从常规方法调用协议默认实现

我想知道是否有可能实现这样的目标.
我有一个像这样的游乐场:

protocol Foo {
    func testPrint()
}

extension Foo {
    func testPrint() {
        print("Protocol extension call")
    }
}

struct Bar: Foo {
    func testPrint() {
        // Calling self or super go call default implementation
        self.testPrint()
        print("Call from struct")
    }
}


let sth = Bar()
sth.testPrint()
Run Code Online (Sandbox Code Playgroud)

我可以提供一个默认实现,extension但如果Bar需要默认实现中的所有内容以及其他内容,该怎么办?
它在某种程度上类似于调用es中的super.方法class来满足实现每个属性等的要求,但我认为没有可能实现相同的structs.

oop protocols swift swift2

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

永久设置UITableView内容

在我的应用程序中,我有一个UISearchBarunder,UINavigationBar因此它始终对用户可见.在这种情况下,我必须设置contentInset额外的44px,因此UIScrollView将滚动UISearchBar (完全像在Contacts.app中).静态UITableView的没有问题,但在我的情况下,我必须重新加载它的内容,切换到UISearchDisplayController等等.所以当我打电话时:

[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];
Run Code Online (Sandbox Code Playgroud)

一切都有效,直到我拉动刷新......(为此我使用SSPullToRefresh).

所以我的问题是:如何contentInset永久设置,以便我不必担心内部数据发生任何变化UITableView

objective-c uitableview uiscrollview ios pull-to-refresh

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

UITextView字体为零

我在故事板中创建了一个字体大小为14的UITextView,并将其连接到我的ViewController的detailDescriptionLabel属性.此代码位于viewDidLoad中:

self.detailDescriptionLabel.font=[UIFont systemFontOfSize:10];
NSLog(@"text is %@; font is %@", self.detailDescriptionLabel.text, self.detailDescriptionLabel.font);
Run Code Online (Sandbox Code Playgroud)

控制台输出如下:

text is Lorem Ipsum; font is (null)
Run Code Online (Sandbox Code Playgroud)

为什么字体设置为nil?setFont:正在工作; 字体缩小了.我希望得到字体,所以在手势后我可以在字体上调用lineHeight.这样,我可以使用以下代码找出已经使用了哪一行:

int line = [tap locationInView:tap.view].y / self.detailDescriptionLabel.font.lineHeight;
Run Code Online (Sandbox Code Playgroud)

这里的字体也是零.line设置为-2147483648,这显然不是我想要的.

fonts objective-c uitextview uifont ios

34
推荐指数
2
解决办法
7202
查看次数

进入前台时出现UIRefreshControl错误

当我UIRefreshControl在View Controller中使用时,我注意到了一个小错误(但真的很烦人).当应用程序从后台返回时,UIRefreshControl已经加载了它,它看起来像这样:

正如您所看到的,我使用了一个自定义导航控制器,它隐藏在Facebook应用程序(AMScrollingNavBar)中.当我重新加载数据时,UITableView一切都恢复正常,只有在从后台返回后才显示此错误.

这是我用的初始化代码UIRefreshControlviewDidLoad:

// Initializing generic refresh control
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(collectData) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:self.refreshControl];
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview uinavigationcontroller ios uirefreshcontrol

13
推荐指数
3
解决办法
3588
查看次数

设置UIScrollView缩放比例以适合屏幕

我的观点是复制使用照片的许多应用程序的行为,其中当UIScrollView显示UIImageView内部时,即使此图像较小,它也适合图像的大小.

我确定这不应该用UIImageView框架来完成但是操纵UIScrollView但是如何......?


在我的代码中,我有一个调用updateZoom该方法的方法,minimumZoomScale并将该值赋给该zoomScale属性.我想这是做数学和zoomScale手动计算的正确位置.

这是方法:

- (void)updateZoom {
    float minZoom = MIN(self.view.bounds.size.width / self.imageView.image.size.width, self.view.bounds.size.height / self.imageView.image.size.height);

    if (minZoom > 1) {
        minZoom = 1;
    }

    self.scrollView.minimumZoomScale = minZoom;
    self.scrollView.zoomScale = minZoom;
}
Run Code Online (Sandbox Code Playgroud)

我希望有人会给我一个关于如何设置以适应界限的打击.zoomScaleUIScrollView

iphone objective-c uiscrollview uiimageview ios

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

使用Vapor上传文件

我在Body部分的文档中看到,现在支持文件上传 - 或者至少我是这样理解的

我在后端开发方面没有坚实的基础 - 特别是如果它涉及到仍然像Vapor那样快速发展的框架.我想知道是否有人可以提供文件上传的真实例子?我希望有一个简单的网页,可以将文件上传到后端,然后存储以备将来使用.

vapor

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

在图中查找所有可能的路径

我正在寻找一些算法来帮助我在图中找到所有可能的路径。到目前为止我发现的一切都不完全令人满意。

假设我们有一个像这样的图(树):
在此处输入图片说明

让我们使用一些算法,如广度优先搜索深度优先搜索。作为回报,我们会得到类似的东西

1, 2, 4, (2), 5, (2), 6, (2), (1), 3, 7, 8, (7), 9
Run Code Online (Sandbox Code Playgroud)

这就是我们通过这棵树的方式,这不是我要找的。我很想获得所有路径,例如:

1
1, 2
1, 2, 4
1, 2, 5
1, 2, 6
1, 3
1, 3, 7
1, 3, 7, 8
1, 3, 7, 9
Run Code Online (Sandbox Code Playgroud)

问题是我只想指定root节点和算法应该能够为我提供任何长度的所有可能路径。


到目前为止,我拥有的简单代码如下所示:

func dfs(_ graph: Graph, source: Node) -> [String] {
    var nodesExplored = [source.label]
    source.visited = true

    for edge in source.neighbors { …
Run Code Online (Sandbox Code Playgroud)

algorithm traversal graph-theory breadth-first-search depth-first-search

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

等待网络通话结束

我要实现的目标是发出网络请求并等待它完成,以便我可以决定下一步应该是什么应用。通常,我会避免这种解决方案,但是这种情况很少见,在这种情况下,代码库有很多遗留问题,并且我们没有足够的时间来应用必要的更改来使事情变得正确

我正在尝试编写具有以下定义的简单输入输出方法:

- (nullable id<UserPaymentCard>)validCardForLocationWithId:(ObjectId)locationId;
Run Code Online (Sandbox Code Playgroud)

事实是,为了在此方法内执行某些验证,我需要发出网络请求以仅接收必要的信息,因此我想等待此请求完成。

我想到的第一件事就是使用dispatch_semaphore_t,所以最终得到了这样的东西:

- (nullable id<UserPaymentCard>)validCardForLocationWithId:(ObjectId)locationId {
    id<LocationsReader> locationsReader = [self locationsReader];

    __block LocationStatus *status = nil;
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    [locationsReader fetchLocationProviderStatusFor:locationId completion:^(LocationStatus * _Nonnull locationStatus) {
        status = locationStatus;
        dispatch_semaphore_signal(sema);
    } failure:nil];
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

    return [self.paymentCards firstCardForStatus:status];
}
Run Code Online (Sandbox Code Playgroud)

一切都可以编译并运行,但是我的UI冻结了,实际上我从未收到sempahore的信号。因此,我开始玩dispatch_group_t完全相同的结果。

看起来我可能在执行代码的地方遇到了一些问题,但是我不知道该如何处理并获得预期的结果。当我尝试将所有内容包装起来时,dispatch_async我实际上停止了阻塞主队列,但dispatch_async立即返回,因此我return在网络请求完成之前从此方法退出。

我想念什么?如果没有一些while技巧,实际上可以实现吗?还是我想打风车?


通过以下解决方案,我可以实现自己想要的功能,但确实感觉像是一种骇人听闻的方式,而不是我希望在我的代码库中提供的东西。

- (nullable id<UserPaymentCard>)validCardForLocationWithId:(ObjectId)locationId {
    id<LocationsReader> locationsReader = [self locationsReader];

    __block LocationStatus *status = nil;
    __block BOOL flag = …
Run Code Online (Sandbox Code Playgroud)

concurrency objective-c grand-central-dispatch ios

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

旧图书馆,新的CocoaPods

因为CocoaPods 0.36可以被任何人使用,而且他们现在正在使用Swift和Frameworks支持我有一个问题困扰我今天...

Podfile在我的项目目录中创建,填写:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

pod 'AFNetworking'
pod 'SwiftyJSON'
Run Code Online (Sandbox Code Playgroud)

并运行pod install像往常一样......你知道这个故事.但是当我打开我的.xcworkspace并且去任何ViewController并且import SwiftyJSON它只是工作但是当我尝试用AFNetworking做同样的事情时我得到了No such module 'AFNetworking'.当然,我可以创建一个Bridging-Header并使用Objective-C方式导入它但是当我阅读这篇博文时,我可以看到:

要在Swift中使用此子规范,而不使用生成的伞形头,您需要创建桥接头并使用类似导入#import <AFNetworking/AFNetworking+UIKit.h.使用生成的伞头,import AFNetworking如果你的Podfile中包含了subspec ,你只需要.

如果我错了,请纠正我,但我认为如果我们使用CocoaPods添加库,则不再需要手动Bridging-Header,对吧?那么,为什么这不起作用?

objective-c ios cocoapods swift

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

从 Swift 和 React Native 访问相同的持久存储

我们正在考虑将 React Native 用于我们的一个屏幕 - 为了好玩,检查它并更好地掌握可能性,但即使在开始之前我也需要一些答案,所以我们确信 React Native 和它的环境可以满足我们的要求。

在这个问题中,我想特别询问有关持久化数据和访问它的问题。

在我们的应用程序中,我们专注于离线体验,因为它对我们来说是最关键的点之一。在 iOS 上,我们有几种可能性来实现这一点,例如。核心数据、领域……但问题是,如果我们决定将应用程序的某些部分实现为 React Native,我们还需要这些部分来访问存储的数据,甚至修改它并保存到持久存储。
这能实现吗?拥有一个持久存储(SQLite、Realm 或其他什么?)并从 Swift 代码和 React Native 访问它。

core-data realm ios swift react-native

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