我使用Swift 5测试所有的NSLayoutContraints of someView,如果它们与某些otherView有关
@IBOutlet var someView: UIView!
@IBOutlet var otherView: UIView!
for constraint in someView.constraints {
if (constraint.firstItem == otherView) {
...
}
}
如果出现以下错误,此代码将失败:
二进制运算符'==‘不能应用于'AnyObject?’类型的操作数。还有“
在Swift 2中,可以使用is AnyObject测试值是否为对象。
然而,在Swift 3中,所有值类型在输入到_SwiftValue对象时都会自动装箱到AnyObject中。这意味着x is AnyObject表达式在Swift 3中始终为真。编译器甚至会对此发出警告:
'is' test is always true
Swift 3的值自动装箱有一个内存分配成本。是否有运行时测试来确定给定值是否是Swift 3中的对象?
在Swift 3中,我不再能够检查泛型变量类型是否是类(AnyObject)。下面的代码返回true for isObject,即使特定类型的T和传递的值是结构而不是类。在SWIFT2.3和2.2中,它按照预期工作,isObject是false。
struct Foo<T>
{
var value: Any?
var isObject: Bool = false
init (val: T?)
{
if val != nil
{
// following line shows warnings
据我所知,Swift对象应该符合AnyObject和Any,而结构应该只符合Any。
//Tested with Swift 5.0
class Car {
var name = ""
}
let myArray = [Car]()
let example1 = myArray as? AnyObject
let example2 = myArray as AnyObject
print(example1 != nil) //true
print(example2 != nil) //true
为什么这两个例子都是true
据我所知,example1应该是nil
我在三个文件(:Menu.swift、Main.swift和Game.swift )之间工作。
在我的Main.swift中,我定义了变量swipeNumber
class Main {
var swipeNumber: Int = 0 {
didSet{
println("The new swipe number is \(swipeNumber)")
}
}
}
注:它是类中的,这样我就可以从其他文件__中引用变量,didSet属性观察者将运行__函数。
如您所见,它的初始值(我认为)是0。
然后,在我
我真的不太了解SWIFT3.0 Firebase语法的更新,但最重要的是,从快照的子级检索值似乎是不可能的。为此,我使用如下代码片段:
if let snapVal = snapshot.value as? [String: AnyObject] {
for c in snapshot.children {
let cx = (c as! AnyObject)
let name = cx["NAME"] as! String
}
}
我已经对此采取了许多方法,
今天和斯威夫特闹着玩的时候,我遇到了一件奇怪的事。下面是我开发的单元测试,它展示了使用Swift的AnyObject时的一些意想不到的行为。
class SwiftLanguageTests: XCTestCase {
class TestClass {
var name:String?
var xyz:String?
}
func testAccessingPropertiesOfAnyObjectInstancesReturnsNils() {
let instance = TestClass()
我在我的integer文件中插入了一个info.plist,显然,我想从Swift UIViewController中检索它。代码非常简单:
class MyController: UIViewController {
private let value: Int
required init(coder aDecoder: NSCoder) {
if let info = NSBundle.mainBundle().objectForInfoDictionaryKey("v"){
value = info.integ
这是我的密码:
let string: String = "hello"
let int: Int = 5
let double: Double = 3.14
let mixedTypeArray = [string, int, double]
let elementOfApparentlyUnknownType = mixedTypeArray[0] // AnyObject
我已经非常明确地说明了混合类型数组mixedTypeArray中每个元素的类型。但是,在获取数组中的第一个元素时,编译器不会推断该元素为String。相反,它是AnyObject类型的。
mixedT
请不要将“任何类型的值没有成员值”标记为副本。我不是在问如何解决编译器错误。
我的问题是:什么是处理嵌套字典的最佳实践?
我在Swift 2中的代码是:
if result != nil {
let token = String((result.value(forKey: "credentials")?.value(forKey: "token"))!)
let uid = String((result.value(forKey: "uid"))!)
let bio = String((result.value(for
考虑这个myFilter函数,它接受一个泛型参数,并根据谓词过滤数组。这与Swift提供的filter()函数相同。
func myFilter<T>(source: [T], predicate:(T) -> Bool) -> [T] {
var result = [T]()
for i in source {
if predicate(i) {
result.append(i)
}
}
return result
}
这和,
func myFilter(source: [AnyObject], predicate:(Any
首先,我尝试映射一个[String?],以获得一个[String]
$ xcrun swift
Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.30). Type :help for assistance.
1> import Foundation
2> let j: [String?] = ["a", nil]
j: [String?] = 2 values {
[0] = "a"
[1] = nil
}
3> j.map {$0 ?
我在一些设备上崩溃的代码片段如下:
Crashed: com.apple.root.default-qos
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x00000000cbd
代码:
var obj:AnyObject = command.arguments[0] as AnyObject!
var theData:AnyObject = obj["getContactImagesByEmails"] as AnyObject!
if let contactImagesByEmails:AnyObject = obj["email
if let service = dict["service"] as? [String: AnyObject] {//dict is JSON object
if let boolValue = service["isDeliverable"] {//Value is: false
let isTrueVal = boolValue as! Bool // Crash as Bool is not a type of AnyObject
let isTrueVal = boolValue as?
Swift和json新手
我想从anyObject元素中提取lng。下面是我从json文件中提取的代码的一部分:
for (key,value) in geoFeature! as [String: AnyObject] {print("key=",key, ptvir, value)}
let geoCoords = geoFeature?["coordinates"] as AnyObject
结果是:
Printing description of geoCoords:
▿ 1 element
▿ 0 : 11 elements
▿ 0 :
我正在查看阵列控制器的.selection,我想知道所选内容是多值还是零值。在ObjC中,我们通过将选择作为一个id并使用各种占位符标记( NSMultipleValuesMarker、NSNoSelectionMarker和NSNotApplicableMarker )检查它的原始相等性来实现这一点。
但这在Swift中行不通:
let currentValue = eventsArrayController.selection.valueForKey("enabled")
if let markerVal = currentValue {
现在我在swift 2.1上工作,但我已经在swift 2.0上创建了我的项目,我的代码在swift 2.0上工作,但当我尝试在最新的swift中进行代码转换时,我无法理解如何转换,请给我解决方案
var header_constraint_H_Format = ""
var header_constraint_V_Format = ""
var bubble_constraint_H_Format = ""
var bubble_constraint_V_Format
我最近将我的应用程序从SWIFT2.3升级到了SWIFT3.0,当我这样做时,我得到了以下错误:
Type 'Dictionary<NSObject, AnyObject>?' has no subscript members
它出现的功能如下:
class func getSSIDConnectionName() -> String? {
var currentSSID: String?
let interfaces = CNCopySupportedInterfaces()
if interfaces == nil {
如何匹配Swift中对象的数据类型?
比如:
var xyz : Any
xyz = 1;
switch xyz
{
case let x where xyz as?AnyObject[]:
println("\(x) is AnyObject Type")
case let x where xyz as?String[]:
println("\(x) is String Type")
case let x where xyz as?Int[]:
println("
Swift为处理非特定类型提供了两个特殊的类型别名: AnyObject可以表示任何类类型的实例。Any可以表示任何类型的实例,但函数类型除外。注仅当您显式地需要它们提供的行为和功能时,才使用Any和AnyObject。在代码中指定您希望使用的类型总是更好。
如果我正确理解它,当它与类类型兼容时,应该使用AnyObject,这意味着它不能表示Swift的内置String、Int、Dictionary、Array等.因为这些都是在Swift中表示的结构,而不是类。
但是,当我编写以下代码时,可以编译它,而不会出现任何错误:
var myInt: Int = 10
var myStr: S
我是Swift的初学者,正在使用Swift 3.0。我有以下设置:
var profileArray = [[String: AnyObject]]()
profileArray.append(["profile_name":profileName.text! as AnyObject,"wifi":wifiValue.isOn as AnyObject,"bluetooth":btoothValue.isOn as AnyObject,"airplane":airplaneValue.isOn as AnyObject,
我希望能够在Swift中获得Any变量的底层数据类型的大小。我希望通过运行MemoryLayout.size(ofValue: anyObject)可以实现这一点,但是该表达式总是返回32,而不管Any对象的底层数据类型如何。我假设32是内部Any构造/类型的大小,它保存关于它存储的对象的元数据。
如何获得底层数据类型的大小?
let regularInt: Int = 1
let anyInt: Any = Int(2) as Any
MemoryLayout<Int>.size // 4
MemoryLayout<type(of: any