我一直在阅读罗伯特·马丁的清洁建筑,更具体地说是VIPER.
然后我遇到了这篇文章/ post Brigade的经验使用MVC替代,它描述了我目前正在做的事情.
在尝试在新的iOS项目上实现VIPER之后,我遇到了一些问题:
我想知道如何用地图中当前位置的脉动环来实现蓝色球,但是没有mapview.
基本上我想知道当用户触摸屏幕时,在普通UIView(或我的自定义视图)上有一个带有脉动环的蓝色球的最佳方式,该触摸是蓝色球的中心.
我有两个想法,首先我可以实现一个动画,我无法做到,但它可能是可能的.其次,我可以得到一系列图像,如gif,并在用户触摸的任何地方显示.
哪一个是最好的选择?或者有更好的选择吗?
谢谢.
我正在尝试实施Robert Martin描述的清洁架构.更具体地说,我正在使用VIPER,这是一个iOS版本的Clean Architecture.
我遇到的问题如下:
用户开始查看带有位置(引脚)的地图.如果他点击一个按钮,则会丢弃一个引脚并将其带到另一个视图以创建(或编辑,如果它是对现有引脚的点击)该地点(或取消).在另一个视图中,用户可以编辑地点的信息,然后单击"返回"或"完成"(或"编辑").如果他单击"完成",PlaceDetailsViewController将向PlaceDetailsPresenter发送一条消息,其中包含位置信息,PlaceDetailsPresenter使用CreatePlaceInteractor创建该位置.此交互器返回用于标识场所的GUID.
如果用户在创建场所之前点击回来,他会回到地图并且掉落的针脚会上升和离开(因为它没有GUID,它是一个新的位置并消失).如果他在创建后单击后退,则引脚会保留在那里(因为它应该有一个GUID).
我该如何连接所有这些以及应该存储地点信息(包括GUID)的位置?澄清一点:
现在,这就是我所拥有的:

编辑:
基本上我认为问题在于VIPER来自罗伯特·马丁的清洁架构而且他来自Web(Rails)背景,所以他对状态没有太多考虑(或者在他的会谈中没有详细说明).
这主要是我的问题,应该在哪里存储状态,不同模块应该如何通信,如果是通过线框,或通过数据库,或通过交互者,或通过演示者彼此通信,如https:/ /github.com/objcio/issue-13-viper-swift.
我的问题很简单,我怎么做都warnings成为errors上SwiftLint?(无需单独手动配置每个规则)
假设我有这个结构:
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)
但是,显然,没有我必须手动声明数组中的每个属性.
我怎样才能做到这一点?
为什么要UIImagePNGRepresentation(UIImage())回报nil?
我正在尝试UIImage()在我的测试代码中创建一个断言它是否正确传递.
我对两个UIImage的比较方法使用了UIImagePNGRepresentation(),但由于某种原因,它正在返回nil.
谢谢.
我在我的Exponent项目中使用ExNavigation.
如何从路径组件外部进行导航?
所以我从同一个地方创建
<NavigationProvider router={router}>
<StackNavigation initialRoute={router.getRoute('First')}/>
</NavigationProvider>
Run Code Online (Sandbox Code Playgroud)
我想访问一个navigator我可以push和pop.
另一种选择是从First组件内部推送,但我在renderRight组件中执行此操作,该组件在我的内部声明,static route因此我无权访问this.props.navigator.
我还想要一种方法将道具传递给父母的路线组件(谁声明了<NavigationProvider>...).
这有可能吗?
注意:我不想使用Redux商店.显然,我可以通过全局功能实现任何目标.
我如何在一个方法中创建一个方法,extension让它只能在类(或它的子类)中访问,就像一个private方法,但在一个extension?
private 不会起作用,因为它必须在同一个声明中.
fileprivate 不起作用,因为它必须在同一个文件上.
public 或者默认设置不起作用,因为它可以从其他类中看到.
我错过了什么吗?
我正在寻找像extensionprivate或的东西classprivate.
我一直在阅读和使用功能编程(FP),我非常喜欢它的概念,但我不确定如何将它们应用于我的大多数应用程序.
我将更具体,让我们谈谈iOS应用程序.我确实看到了如何使用一些概念,如不可变数据结构和高阶函数,但不知道如何使用/大多数纯函数 - 避免副作用 - 这似乎是FP的主要部分.
我觉得这个应用程序的大部分内容都是关于协调输入调用,显示数据,保存数据,发出网络请求,从一个屏幕导航到另一个屏幕,动画.
所有这些都是FP上不纯的功能:
我必须处理数据的地方很少,而且几乎总是从数据库中检索一些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数据转换为可显示的数据.所有其他都有副作用.我觉得我做错了,也许有些代码应该以不同的方式组织,以便更多的代码可以转移到纯函数.
如何编写一个使用swift和XCTest进行方法调用的测试?
我可以使用OCMock,但他们并没有正式支持swift,所以没有多少选择.
ios ×5
swift ×5
architecture ×2
ios6 ×1
ios8 ×1
navigation ×1
ocmock ×1
react-native ×1
swift4 ×1
swiftlint ×1
uiimage ×1
xctest ×1