如何从Swift 4智能密钥路径语法中获取字符串值(例如)?在这一点上,我对任何方式都很好奇,如果它很复杂并不重要.\Foo.bar
我喜欢类型信息与智能密钥路径相关联的想法.但并非所有的API和第三方都在那里.
通过编译时验证获取属性名称字符串的旧方法#keyPath()
.使用Swift 4 #keyPath()
你必须声明一个属性@objc
,这是我宁愿避免的.
一年前,我看过几个关于Auto Layout优点的Apple WWDC主题演讲,但是当我在真实世界的项目中尝试它们时,我体验到当你在Storyboard上移动一些UI元素时,它会打破一半的约束,消除了自动布局的所有好处.
到目前为止,我已经非常成功地使用了Springs&Struts,并且结合KVO观察框架路径进行查看,只需几行代码即可优雅地处理大部分旋转重新调整.
所以现在iOS 7问世,我得到一个问题:我是否可以成功地仅针对iOS 7应用程序使用Springs&Struts并避免使用自动布局?或者我这样做会失去什么?学习和掌握在不同情况下使用自动布局的技巧可能需要几天时间,所以我真的很感激一些有争议的建议.
解决:感谢Max的回答,我开始深入研究Auto Layout; 虽然Null
他的回答是正确的 - 你实际上可以在iOS 7上使用Springs&Struts而不会有太多麻烦,Auto-Layout功能强大.
显然在Xcode 5中,修复了以下内容:
要删除一个约束,你实际上不需要进行古老的萨满雨之舞.您将其删除并且布局进入警告模式,指示您需要解决的问题才能使自动布局工作.
当你移动东西时,你的约束不会改变; 仅在Interface Builder中查看框架更改.
当Interface Builder中的框架实际上与使用布局约束框架计算的框架不同时,Interface Builder将使用红色虚线指示该元素的运行时框架.最后它是正确的.谢谢,Apple.
这是WWDC 2013会话的链接,演示如何在Xcode 5中利用所有这些.您需要Apple开发者帐户才能查看.
所以我现在的选择是自动布局.谢谢大家.
我注意到运行这会导致视图(或主窗口,不确定)调整片刻,当在iPhone 5/6 +模拟器上运行时,从iPhone 5布局缩放(不通过iPhone 6/6 +的启动图像):
[self.view snapshotViewAfterScreenUpdates:YES];
Run Code Online (Sandbox Code Playgroud)
当你不能在那里传递'NO'时,有什么想法让它工作吗?
更新(7月13日):
似乎不再在iOS 8.4上重现.
假设我在Package.swift
下面有这样的,并且SomePackage
从依赖关系中产生警告swift build
.
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "my-app",
dependencies: [
.package(url: "https://some-package.git", .upToNextMajor(from: "1.0"))
],
targets: [
.target(name: "Run", dependencies: ["SomePackage"]
]
)
Run Code Online (Sandbox Code Playgroud)
如何从依赖项中抑制这些警告,但保留那些来自我的代码的警告?
好吧,有很多关于为自己的目的使用iphone硬件音量按钮的问题(例如相机快门); 我所看到的都是基于接收音量变化通知.
我需要区分音量按钮按下和保持/释放.当然可以基于音量变化通知来实现,如下所示:On volume change event, if there's another event coming shortly - that's a hold (or quick double press); if no event is coming within e.g. half a second that's a button press.
但.有一个名为Snapchat的应用程序; 他们使用音量按钮按下拍照,按住音量按钮可在按住时录制视频.这个应用程序完美地告诉媒体保持 - 意味着新闻事件立即被识别,而不是在半秒内.
所以问题是他们是如何做到的?
在下面的这个例子中,为什么第一个矩阵等于第三个,而不是第二个?
let t1 = CGAffineTransform(scaleX: 2, y: 2)
.concatenating(CGAffineTransform(translationX: 50, y: 50))
let t2 = CGAffineTransform(scaleX: 2, y: 2).translatedBy(x: 50, y: 50)
let t3 = CGAffineTransform(translationX: 50, y: 50).scaledBy(x: 2, y: 2)
Run Code Online (Sandbox Code Playgroud) 让我们假设:
enum MyEnum: String { case value }
let possibleEnum: Any = MyEnum.value
if let str = stringFromPossibleEnum(possibleEnum: possibleEnum)
Run Code Online (Sandbox Code Playgroud)
在stringFromPossibleEnum
不知道枚举类型名称的情况下实现的最佳选择是什么?
func stringFromPossibleEnum(possibleEnum: Any) -> String? {
// how should this be implemented without knowing enum type name?
}
Run Code Online (Sandbox Code Playgroud)
UPD:好的,越来越好,有了这个我可以判断是否possibleEnum
是一个枚举:
if Mirror(reflecting: possibleEnum).displayStyle == .enum { print("yes!") }
Run Code Online (Sandbox Code Playgroud)
但是如何判断这是否是String
基于枚举的?
UPD: 这条推文表明你可以rawValue
从 Enum 中获得Any 。然后你可以检查它是否rawValue
是String
. 但如何rawValue
从Mirror
?
我正在研究以下问题,到目前为止还没有多少问题能够实现.希望你能帮助我理解.
我愿意阅读相关的相关手册,如果你知道,请指出我.
我看到vapor
,这crypto.json
是用任何项目创建的一部分vapor toolbelt
{
"hash": {
"method": "sha256",
"key": "password"
},
"cipher": {
"method": "chacha20",
"key": "passwordpasswordpasswordpassword",
"iv": "password"
}
}
Run Code Online (Sandbox Code Playgroud)
是否应更新任何部署?
swift ×5
ios ×4
app-store ×1
autolayout ×1
encryption ×1
generics ×1
hardware ×1
ios7 ×1
ios8 ×1
ios8.4 ×1
iphone ×1
iphone-6 ×1
localization ×1
objective-c ×1
reflection ×1
swift4 ×1
vapor ×1
volume ×1