我想检查iOS设备的版本是否大于3.1.3
我尝试过的东西:
[[UIDevice currentDevice].systemVersion floatValue]
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我只想要一个:
if (version > 3.1.3) { }
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
显然,与XCode捆绑在一起的clang不尊重上游__clang_major__和__clang_minor__值,而是报告某种面向XCode用户的版本.
以下是clang的各种MacPorts安装的参考值.他们似乎尊重上游版本标识符.在Linux上测试时,我得到类似的值.
? prohibit-clang-3.2 /opt/local/bin/clang++-mp-3.2 -dM -E -x c /dev/null |
grep __clang_m
#define __clang_major__ 3
#define __clang_minor__ 2
? prohibit-clang-3.2 /opt/local/bin/clang++-mp-3.3 -dM -E -x c /dev/null |
grep __clang_m
#define __clang_major__ 3
#define __clang_minor__ 3
? prohibit-clang-3.2 /opt/local/bin/clang++-mp-3.4 -dM -E -x c /dev/null |
grep __clang_m
#define __clang_major__ 3
#define __clang_minor__ 4
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,Apple提供了clang has __clang_major__和__clang_minor__跟踪XCode版本的版本,而不是基本的clang版本:
? prohibit-clang-3.2
/Applications/Xcode-4.6.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
-dM -E -x c /dev/null | grep __clang_m
#define __clang_major__ 4
#define __clang_minor__ 2 …Run Code Online (Sandbox Code Playgroud) 处理一些objC API,我收到一个NSDictionary<NSString *, id> *>转换为[String : Any]Swift的,我用于NSAttributedString.addAttributes:range : .
但是,此方法签名现在已随Xcode 9更改,现在需要一个[NSAttributedStringKey : Any].
let attr: [String : Any]? = OldPodModule.getMyAttributes()
// Cannot assign value of type '[String : Any]?' to type '[NSAttributedStringKey : Any]?'
let newAttr: [NSAttributedStringKey : Any]? = attr
if let newAttr = newAttr {
myAttributedString.addAttributes(newAttr, range: range)
}
Run Code Online (Sandbox Code Playgroud)
如何将a转换[String : Any]为[NSAttributedStringKey : Any]?