相关疑难解决方法(0)

如何查看iOS版本?

我想检查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)

我怎样才能做到这一点?

objective-c ios

837
推荐指数
13
解决办法
44万
查看次数

如何在预处理时间可靠地检测clang的版本?

显然,与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)

c++ xcode clang c-preprocessor

6
推荐指数
1
解决办法
3124
查看次数

如何将[String:Any]转换为[NSAttributedStringKey:Any]

处理一些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]

nsattributedstring swift swift4

2
推荐指数
1
解决办法
5334
查看次数