住宅扩展始终是为您的位置创建额外空间的绝佳选择。 扩展您的办公室空间或您的房屋都没有关系。 您可以选择扩展大频谱或小频谱。 该扩展为您的家提供了额外的空间,让您可以根据自己的生活方式生活。 拥有有关其类型的信息对于确定最适合您的房屋的想法至关重要。 为了扩展,您必须弄清楚空间和成本等所有方面。 在此博客中,您将了解最适合您的不同家庭分机类型 侧面延伸 侧面扩展是车道到您本侧的扩展。 它不像其他扩展那样著名,但是它用于特定的区别。 这是您家附近的户外厨房餐厅和休息室的最佳选择。 后延伸 在该属性的背面必须延伸的地方,这种延伸是优选的。 通常,我们必须扩大我们的厨房和用餐区,以便这种进步会有所帮助。 每当您想扩大厨房或休息室的位置时,都可以在自己的位置加一个后部扩展件。 扩展包装 这是后部和侧面扩展件的组合,可创建一个更大的空间,尤其是用于用餐区,客人休息室和其他任何地方。 我在利兹见过这种类型的房屋扩展 ,人们在露天用餐区大量使用环绕扩展。 双层扩展 当单层必须扩展到两倍时,可以使用这种扩展。 人们选择这些来满足他们家的要求。 当您看到公司从几名员工成长为数百名员工时,这对于办公空间也是有益的。 如果住所遇到住宿困难并且无法按照生活方式生活,则他们倾向于双层扩展。 双层扩展比其他方法花费更多。 这些是您可以在家中或任何其他地方使用的扩展名的主要类型。 不要自己尝试DIY技术,因为您可能不得不面对其他问题,例如获得邻居或土地管理局的规划许可。 在计划得到专业人士的帮助之前,他们将让您知道该怎么做以及哪种类型最适合您的位置。 为建筑和规划提供经济有效的解决方案的不同专业人士。 如此有用; 专业建议,以保护您的网站免遭破坏
大家好 !! 在上一篇文章中,我们都讨论了Swift中的一些基本闭包。如果您尚未对其进行检查,请进行检查。在本教程中,我们将讨论更多内容。 Swift会自动为内联闭包提供简写参数名称,可用于通过名称$ 0,$ 1,$ 2等来引用闭包参数的值。 速记参数名称 正如我们上面讨论的,Swift 4通过表示$ 0,$ 1,$ 2-$ n来方便用户将内联闭包表示为速记参数名。通过在闭包表达式中使用此速记参数名,我们可以从其定义中省略闭包的参数列表。 in 关键字 由于闭包表达式完全由其主体组成,因此可以省略。请看以下示例。 因此,在第一个示例中创建了一个闭包,该闭包采用单个参数并返回字符串。此处$ 0表示第一个参数。类似地,在第二个示例中,闭包采用两个参数,通过使用$ 1,我们引用了第二个参数。关闭 自动关闭 我们知道闭包可以用作函数中的参数。当我们编写@autoclosure时 ,参数会自动包裹在闭包中。但是,如果我们创建一个具有@autoclosure的函数,则存在一个问题,通常调用该函数具有自动关闭功能的函数,但是实现这种功能并不常见。 让我们举一个小例子。 func simpleFunctionwithoutAutoclosure(_ parameters:()-> Void){ 打印(“嘿,我们刚刚创建了一个没有@autoclosure属性的函数”) 参数() } simpleFunctionwithoutAutoclosure({ 打印(“ hello”) }) func simpleFunctionwithAutoclosure(_参数:@autoclosure()->无效){ 打印(“嘿,我们刚刚创建了一个具有@autoclosure属性的函数”) 参数() } simpleFunctionwithAutoclosure(print(“ hii”)) 并且输出如下 从上面的两个函数中,我们注意到,在@autoclosure的情况下,无需将表达式用大括号括起来。 如果要传递闭包而不是自动闭包,这就是我们需要做的。 逃逸关闭 当闭包作为函数的参数传递给闭包时,闭包被认为是对函数的转义,但是在函数返回后会被调用。 声明将闭包作为其参数之一的函数时,可以在参数的类型之前编写@escaping,以指示允许对闭包进行转义。 Apple的文档给出了一个示例,该示例将传递给函数的闭包附加到您的类/结构中可变的闭包数组中: varcompleteHandlers:[()->无效] = [] func someFunctionWithEscapingClosure(completionHandler:@escaping()-> Void){ […]
TL; DR 异步反应性函数,例如Observable.interval() , Observable.timer()或您自己的异步反应性函数,可以通过沿时间轴移动被测对象来使用RxTest.TestScheduler进行测试。 真正忙碌的人可能会立即深入那里的代码: vadimue / RxLocation RxLocation –反应性使用CoreLocation github.com 简单样本 我们都写测试,不是吗? 😏有时我们甚至使用TDD。 通常,我们将Observables用于多个异步操作。 但是用单元测试来测试它们可能很棘手。 如果我们不编写DispatchQueue.main.asyncAfter()或wait(for: [expectation], timeout: 60)异步测试将失败。 否则,我们可能将Rx用于同步操作,这就是为什么我们不会在执行等待时遇到问题。 例如,让我们看一个测试,该测试涵盖了当用户点击单元格时打开带有详细说明的页面。 该测试同步运行,这就是为什么它呈绿色的原因。 与时间有关的要求 有时需要描述测试中与时间相关的要求。 如果您需要测试发送API请求并同时显示UIActivityIndicator怎么办? 还是基于某些延迟下载数据? 测试可能需要一段时间才能运行,因为它们必须等待操作完成。 显然,我们旨在加快运行测试的速度,因为我们经常运行测试并且不想浪费时间。 那么我们应该如何为这些情况编写测试? 我建议从业务需求入手。 假设您创建了一个用于监视用户位置的应用程序: 您可以使用CoreLocation框架; 实现CLLocationManagerDelegate并使之具有响应性(重用来自官方存储库CLLocationManager + Rx.swift和RxCLLocationManagerDelegateProxy.swift的扩展); 使用这些扩展创建单独的服务; 之后获取微小的LocationServiceProtocol的实现。 方法location()返回原始CLLocation对象序列。 在当前的实现中,它们每秒以最简单的配置到达。 那么,需求呢? 位置数据传输应该是周期性的,取决于运行和以下规则: 传输必须至少每分钟执行一次(静止),并且位置变化超过10 m; 传输的频率不应超过每10秒一次。 为了使代码简单(嗨,SRP!),我创建了单独的类,该类将过滤虚拟位置序列。 TrackingService符合该协议: 让我们从描述第一个要求开始: 传输必须每分钟至少执行一次。 要遵循TDD,我们应该首先编写测试。 为此创建并设置XCTestCase类: 时间旅行 现在我们可以编写我们的第一个测试。 这是最终版本。 […]
TLDR:如果将本地通知设置为在用户关闭本地通知权限时触发,则该通知仍会在预期的时间触发(如果用户稍后打开权限)。 本地通知是任何iOS开发人员工具箱中的有用工具。 如果您要构建任何类型的警报工具,则几乎没有其他选择。 不幸的是,许多用户无法区分本地通知和推送通知,并且会拒绝两者的权限。 最近,我正在开发一个应用程序,用户可以在其中注册以获得自己喜欢的事件的警报。 即使用户不允许我发送本地通知,我仍将其设置为在所需时间重复(我不会讨论如何设置本地通知,但这是苹果公司有关如何设置它们的说明)。 那么,那些发送给用户的本地通知怎么了? 更重要的是,如果我说服用户打开权限,通知是否会按计划发送? 让我们设置一个场景: 当用户拒绝了通知授权时,我将本地通知设置为每天2:00 PM重复。 下午1:30,用户授予我发送本地通知的权限。 下午2点会发生什么? 通知是按计划发送的,还是因为初始化时没有权限而从未设置? 在上述情况下,即使我在用户关闭通知的情况下设置了通知,通知也将照常发送。 由此看来,可以肯定地说,如果用户的权限仍然处于脱机状态,Apple只是抑制了您发送的通知。 希望这可以节省一些时间! 非常感谢您的阅读! 如果您喜欢这个故事,请在 Twitter上 关注我,在 那里我发布有关产品管理,工程和设计的文章。
在我正在从事的项目中,我们将代码分配拆分为多个小模块(框架),其中一个用于请求唯一标识符(在服务器端生成),该标识符将在每个API请求中使用,但在某些情况下,用户必须输入密码才能生成该唯一代码,因此该模块需要在用户界面中填充一些内容,但是如何获取呢? 因为我无法向您显示我们的代码,所以我创建了一个项目以将信用卡保存在本地钥匙串中,如果找不到卡,我们将要求用户按照以下UML序列图的说明将卡的详细信息提供给我们: NS通知 我讨厌通知,它们很难调试,并且增加了代码的复杂性。 如果我们想使用它们来解决问题,我们将至少需要3条通知,这太丑陋了! 代表 委托可以是一个解决方案,但是问题在于“进行结帐”是基于区块(异步http请求)的,因此,如果我们在钥匙串中未找到信用卡,我们将取消该请求。 委托+块(或Swift中的闭包) 这是我自带的解决方案,而不仅仅是使用委托,而是在委托函数中添加了一个完成块: func creditCardNeeded(错误:NSError,完成:@转义(_ creditCard:Dictionary )->无效); 此功能的第一部分是告知代表我们需要信用卡。 第二部分(关闭部分)将用于将信用卡详细信息从用户界面发送回框架。 是时候查看完整的代码🙂 根视图控制器ViewController 在这里,我们开始结帐过程(payAction是起点)。 请注意,我们保留了要使用的闭包的引用( self.cardCompletion = complete )。 2. CardDetaildViewController 该视图控制器将用于让用户填写卡的详细信息。 3. PaymentManager:框架类 在这里,我们使用委托功能开始请求或要求提供卡详细信息。 这里的主要问题是,当用户验证其卡详细信息时,我们将使用闭包引用返回框架并继续执行任务! 您可以在github上找到完整的代码:https://github.com/Red-Mak/RMDelegateWithCompletion
什么是Deeplink? 在移动应用程序的上下文中, 深层链接是由统一资源标识符(URI)组成的URL,该URL链接到移动应用程序中的特定位置,而不仅仅是启动应用程序。 为什么要深层链接? 通过网站推广移动应用 最佳用户体验 通过广告横幅展示营销 通过吸引用户使用定制的电子邮件来进行电子邮件营销 延迟深层链接!! 延迟深度链接是移动深度链接的各个方面之一,它描述了深度链接到尚未安装的应用程序的原理。 在这种情况下,深度链接将被“推迟”,直到用户安装该应用程序为止。 单击延迟的深层链接后,它将导航到App Store / Play商店,并且在安装应用程序后,它将导航到应用程序内的特定位置。 如果已经安装了应用程序,它将直接启动该应用程序,并打开该应用程序内的特定位置。 通用链接! 从iOS 9开始,Apple引入了通用链接。 单击通用链接时,iOS会检查是否已安装支持链接的应用程序并打开相应的应用程序,否则将在Web浏览器中打开URL(链接)。 (对于运行9.0之前的iOS版本的用户,点击通用链接可在默认Web浏览器中打开该链接) 使用Branch SDK在iOS中集成延迟的深度链接 步骤1:安装Branch SDK 使用 CocoaPods 平台:ios,“ 10.0” 目标“ APP_NAME” use_frameworks! 吊舱“分支” 结束 然后运行“ pod install” 使用 迦太基 github“ BranchMetrics / ios-branch-deep-linking” 使用 源代码 手动安装Branch 将Branch.framework到Embedded Binaries ( Copy items if needed选择Copy items if […]
Bienvenidos a la tercera parte de esta serie de tutorials。 《从前的事实》到《从无到有的事实》 。 从本质上讲,它是一种可组合的,可转换的组件,还可以在ViewController和Podigo中进行修改。 可以从任何人那里得到的东西,可以使您在任何时候都可以使用的东西,可以在任何时候都可以使用。 您可以使用Vamos Hacer或Funcionen! Vamos a mostrar una alerta cuando elbotón“ Calcular” haya sido pulsado。 没有人打扰到我。 Para eso vamos a escribir algo decódigoSwift😎💪 -> 工程浏览器 ,单击ViewController.swift El Interface Builder为 WTF color着色。 Esto es elcódigoSwift de tu应用程序: 的功能,没有接收到Agrega la siguientelíneadecódigodebajo de laúltimallave的信息,didReceiveMemoryWarning didReceiveMemoryWarning() @IBAction […]
IOS 11.3之后的Safari 11.1支持PWA,也可以直接加入主屏幕,看来今年webapp的发展可以更快速了。 除了PWA之外,还有其他亮点: 支付API 信标API 画布调试 文件和目录条目API 这次的更新真是振奋人心,更多资讯请参考:https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.html 2018/1/26更新 今天花了一点时间把模拟器装起来测试,结果PWA的支持不如预期,这位作者有更完整的测试,简单来说就是目前的PWA还是很掰咖,例如: 1.无法离线访问 2.没有启动画面 3. webview的缓存无法共享 4.无法设定方向 5. link的行为没有区别external link,一律都在app本身打开,连到外站就无法回来了 6.每次都会重新载入 7.没有Web App标语 总之,理想跟现实还是有很大的分歧,希望正式版发布还可以解决这些问题。 编号:https://medium.com/@firt/pwas-are-coming-to-ios-11-3-cupertino-we-have-a-problem-2ff49fd7d6ea
有时,我的客户告诉我,他们无法连接到服务或具有错误数据。 服务器和应用程序上没有错。 也许网络环境慢是问题所在。 在我的开发环境中,我拥有高质量的wifi和蜂窝网络。 我该如何重现这种情况。 您可以轻松地在设备上测试问题。 设置>开发人员>网络链接调节器>状态>启用(选择eanble)并选择配置文件(可能是网络状况很差)。 然后,您可以在慢速网络上测试您的应用程序。 如果还不够,您想调整一些值以进行更多测试。 您需要复制配置文件,然后编辑所需的一些值。
希望将电话直接交付给员工并让他们设置电话并连接到公司资源听起来很简单,但用户通常要打电话给服务台,询问如何设置电话以正常工作。 用户通常没有Apple App Store帐户,因此当被要求安装Outlook和Company Portal时,他们会感到困惑。 如果电话是为用户部分设置的,但不需要额外的管理员和人员来执行此操作,那就太好了。 设置Apple注册计划并使用Apple的批量购买计划可以解决其中一些问题。 正确设置用户将立即获得所需的所有应用程序 设置DEP程序后,请添加受监管的电话。 同时锁定注册,这将阻止用户手动从Intune取消注册。 从Intune中的Apple注册配置文件中执行此操作 苹果注册资料 在您的Apple批量购买计划中,添加您的App (顺便说一下,这是旧的门户,现在已移至新的门户,但概念是相同的) 苹果批量购买计划 搜索所需的应用程序 选择数量 下订单 返回Intune,转到您的iOS VPP令牌 IOS VPP代币 运行同步 现在,这应该从Apple批量许可计划中引入APP 根据需要分配应用 添加您希望用户首次使用时收到的应用程序,根据需要添加它们,以便他们自动安装。 我给了用户 公司门户,Microsoft身份验证器,Microsoft Outlook和OneDrive 将应用分配给组并完成 现在,在前几个设置屏幕上首次使用手机后,用户即可获得开始使用所必需的应用程序。