小编Rod*_*uiz的帖子

关于VIPER的问题 - 清洁架构

我一直在阅读罗伯特·马丁的清洁建筑,更具体地说是VIPER.

然后我遇到了这篇文章/ post Brigade的经验使用MVC替代,它描述了我目前正在做的事情.

在尝试在新的iOS项目上实现VIPER之后,我遇到了一些问题:

  • 演示者可以查询视图中的信息,还是"信息传递"总是从视图开始?例如,如果视图在演示者中触发了某个操作,但随后,根据通过该操作传递的参数,演示者可能需要更多信息.我的意思是:用户点击"doneWithState:",如果state =="something",从视图中获取信息以创建实体,如果state =="something else",则在视图中激活某些内容.我该如何处理这种情况?
  • 让我们说"模块"(VIPER组件组)决定以模态方式呈现另一个模块.谁应该负责决定第二个模块是以模态方式呈现,第一个模块的线框还是第二个模块的线框?
  • 另外,假设第二个模块的视图被推入导航控制器,应如何处理"后退"操作?我是否应该在第二个模块的视图控制器中手动设置一个"后退"按钮,该操作调用演示者,该调用器调用第二个模块的线框,该线框消除并告诉第一个模块的线框它被解除,以便第一个模块的视图控制器可能想要展示什么?
  • 不同的模块是应该仅通过线框还是通过演示者之间的代表进行对话?例如,如果应用程序导航到另一个模块,但之后用户按下"取消"或"保存"并且该选择需要返回并更改第一个模块中的某些内容(可能显示已保存的动画或删除某些内容) ).
  • 假设在地图上选择了一个引脚,而不是显示PinEditViewController.返回时,根据PinEditViewController上的使用操作,可能需要更改所选引脚的颜色.谁应该保持当前所选引脚,MapViewController,MapPresenter或MapWireframe的状态,以便让我知道,当返回时,哪个引脚应该改变颜色?

architecture software-design ios viper-architecture

37
推荐指数
2
解决办法
9900
查看次数

IOS动画脉冲圈像地图上的蓝色球

我想知道如何用地图中当前位置的脉动环来实现蓝色球,但是没有mapview.

基本上我想知道当用户触摸屏幕时,在普通UIView(或我的自定义视图)上有一个带有脉动环的蓝色球的最佳方式,该触摸是蓝色球的中心.

我有两个想法,首先我可以实现一个动画,我无法做到,但它可能是可能的.其次,我可以得到一系列图像,如gif,并在用户触摸的任何地方显示.

哪一个是最好的选择?或者有更好的选择吗?

谢谢.

ios ios6

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

清洁架构 - 罗伯特马丁 - 如何连接用例

我正在尝试实施Robert Martin描述的清洁架构.更具体地说,我正在使用VIPER,这是一个iOS版本的Clean Architecture.

我遇到的问题如下:

用户开始查看带有位置(引脚)的地图.如果他点击一个按钮,则会丢弃一个引脚并将其带到另一个视图以创建(或编辑,如果它是对现有引脚的点击)该地点(或取消).在另一个视图中,用户可以编辑地点的信息,然后单击"返回"或"完成"(或"编辑").如果他单击"完成",PlaceDetailsViewController将向PlaceDetailsPresenter发送一条消息,其中包含位置信息,PlaceDetailsPresenter使用CreatePlaceInteractor创建该位置.此交互器返回用于标识场所的GUID.

如果用户在创建场所之前点击回来,他会回到地图并且掉落的针脚会上升和离开(因为它没有GUID,它是一个新的位置并消失).如果他在创建后单击后退,则引脚会保留在那里(因为它应该有一个GUID).

我该如何连接所有这些以及应该存储地点信息(包括GUID)的位置?澄清一点:

  1. 谁应该通知MapPresenter针脚留在那里还是消失?它是PlaceDetailsPresenter还是应该将此信息传递给PlaceDetailsWireframe - > MapWireframe - > MapPresenter - > MapView?
  2. 在返回之前,应该在PlaceDetailsPresenter或PlaceDetailsViewController中存储此GUID的位置?

现在,这就是我所拥有的: 在此输入图像描述

编辑:

基本上我认为问题在于VIPER来自罗伯特·马丁的清洁架构而且他来自Web(Rails)背景,所以他对状态没有太多考虑(或者在他的会谈中没有详细说明).

这主要是我的问题,应该在哪里存储状态,不同模块应该如何通信,如果是通过线框,或通过数据库,或通过交互者,或通过演示者彼此通信,如https:/ /github.com/objcio/issue-13-viper-swift.

architecture software-design ios

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

如何在 SwiftLint 上强制错误而不是警告?

我的问题很简单,我怎么做都warnings成为errorsSwiftLint?(无需单独手动配置每个规则)

swiftlint

12
推荐指数
2
解决办法
4378
查看次数

从Swift 4中的结构获取所有关键路径

假设我有这个结构:

struct MyStruct {
    let x: Bool
    let y: Bool
}
Run Code Online (Sandbox Code Playgroud)

在Swift 4中,我们现在可以使用myStruct[keyPath: \MyStruct.x]界面访问它的属性.

我需要的是一种访问所有关键路径的方法,例如:

extension MyStruct {

    static func getAllKeyPaths() -> [WritableKeyPath<MyStruct, Bool>] {
        return [
            \MyStruct.x,
            \MyStruct.y
        ]
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,显然,没有我必须手动声明数组中的每个属性.

我怎样才能做到这一点?

swift swift4

12
推荐指数
2
解决办法
2230
查看次数

UIImagePNGRepresentation(UIImage())返回nil

为什么要UIImagePNGRepresentation(UIImage())回报nil

我正在尝试UIImage()在我的测试代码中创建一个断言它是否正确传递.

我对两个UIImage的比较方法使用了UIImagePNGRepresentation(),但由于某种原因,它正在返回nil.

谢谢.

uiimage uiimagepngrepresentation swift

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

ExNavigation - 从父组件或renderRight访问导航器

我在我的Exponent项目中使用ExNavigation.

如何从路径组件外部进行导航?

所以我从同一个地方创建

<NavigationProvider router={router}>
    <StackNavigation initialRoute={router.getRoute('First')}/>
</NavigationProvider>
Run Code Online (Sandbox Code Playgroud)

我想访问一个navigator我可以pushpop.

另一种选择是从First组件内部推送,但我在renderRight组件中执行此操作,该组件在我的内部声明,static route因此我无权访问this.props.navigator.

我还想要一种方法将道具传递给父母的路线组件(谁声明了<NavigationProvider>...).

这有可能吗?

注意:我不想使用Redux商店.显然,我可以通过全局功能实现任何目标.

navigation react-native

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

扩展方法只能在类内部访问

我如何在一个方法中创建一个方法,extension让它只能在类(或它的子类)中访问,就像一个private方法,但在一个extension

private 不会起作用,因为它必须在同一个声明中.

fileprivate 不起作用,因为它必须在同一个文件上.

public 或者默认设置不起作用,因为它可以从其他类中看到.

我错过了什么吗?

我正在寻找像extensionprivate或的东西classprivate.

swift

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

如何在App开发中使用Functional Programming

我一直在阅读和使用功能编程(FP),我非常喜欢它的概念,但我不确定如何将它们应用于我的大多数应用程序.

我将更具体,让我们谈谈iOS应用程序.我确实看到了如何使用一些概念,如不可变数据结构和高阶函数,但不知道如何使用/大多数纯函数 - 避免副作用 - 这似乎是FP的主要部分.

我觉得这个应用程序的大部分内容都是关于协调输入调用,显示数据,保存数据,发出网络请求,从一个屏幕导航到另一个屏幕,动画.

所有这些都是FP上不纯的功能:

  • 协调输入:按钮点击,通知,服务器套接字推送,所有那些我必须决定呼叫什么,在哪里观察它们等.
  • 显示数据:从本地数据库或服务器读取(副作用).
  • 保存数据:与上述相同(但写作).
  • 制作网络请求:很明显,所以我在这里举一个例子 - 从Instagram中检索列表图像.
  • 导航:这基本上是呈现视图控制器,这是一个副作用.
  • 动画:改变屏幕上的内容,副作用.

我必须处理数据的地方很少,而且几乎总是从数据库中检索一些Struct并将多个信息连接到View Controller将使用的另一个Struct(就像5行......假设你需要在视图中显示5个属性).当然,你可能需要做一些像转换这样的处理money: Int = 20 to moneyString: String = "US$\(money).00",但就是这样.

我觉得我在应用开发周期中没有实现FP.任何人都可以澄清我如何实现这一目标吗?也许有例子.

谢谢.

编辑:现在,按照清洁架构的想法,我有这样的东西作为我的架构:

在此输入图像描述

输入可以来自View,按钮点击,他们去ViewController谁决定Interactor拨打哪个.这Interactor将访问必要的Gateways以获取一些数据并将其转换为可传递给Presenter(以委托形式)的可呈现数据.最后Presenter将更新View以显示新数据.

此外,输入可以来自External源,如服务器告诉您某些数据已更新,您必须刷新View.这将是Interactor(以观察者的形式),它将跟随链的其余部分,如前面的例子.

唯一的FP部分是将Gateway数据转换为可显示的数据.所有其他都有副作用.我觉得我做错了,也许有些代码应该以不同的方式组织,以便更多的代码可以转移到纯函数.

functional-programming ios swift

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

XCTest期望使用swift进行方法调用

如何编写一个使用swift和XCTest进行方法调用的测试?

我可以使用OCMock,但他们并没有正式支持swift,所以没有多少选择.

ocmock ios xctest swift ios8

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