小编Meh*_*mar的帖子

在快速语言中为null/nil

我们如何在swift编程语言中定义以下内容:

  • 空值
  • [NSNull null]

换句话说,这些客观c术语中的每一个都是迅速等同的.此外,还想知道是否存在非结构c类型(如结构和枚举)的特定用例.提前致谢.

ios swift

68
推荐指数
5
解决办法
8万
查看次数

iOS指定的初始化程序:使用NS_DESIGNATED_INITIALIZER

我们在XCode 6中引入了这个新的宏:NS_DESIGNATED_INITIALIZER

我在网上搜索,但无法找到任何关于如何使用它的好文档.

从语法上讲,我们可以使用它:

- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

但是使用这个宏标记初始化程序有什么可能的优点,以及使用它时我们应该注意什么?

我主要对这个宏的用例感兴趣.任何链接/文档将不胜感激.

xcode initialization objective-c ios xcode6

35
推荐指数
2
解决办法
2万
查看次数

Swift中面向协议的编程

有人可以详细说明什么是面向协议的编程,以及如何/为什么它是使用Apple的Swift语言编程的最佳方法.

此外,与传统的OOP /功能方法相比,这种方法是否可以提高代码性能?

我已经在Swift视频中观看了面向协议的编程,并希望在深入探讨之前澄清基础知识.

谢谢.

oop functional-programming objective-c ios swift

14
推荐指数
0
解决办法
982
查看次数

目标C中什么是非空的?

有人可以详细说明为什么nonnull在iOS 9中引入?

例如,该NSArray方法+ (instancetype)array;现在+ (instancetype nonnull)array;

请参阅:https: //developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/frameworks/Foundation.html

这是一个客观的c级功能,这将如何影响现有的应用程序?

initialization objective-c ios ios9 xcode7

14
推荐指数
3
解决办法
1万
查看次数

在swift 5枚举中使用@unknown默认值:如何抑制“将永远不会执行默认值”警告?

假设我有如下现有代码:

enum SomeEnumCases {
  case existing
  case alreadyExisting
}

func doSomething(withEnums enumCase: SomeEnumCases) {
  switch enumCase {
  case .existing:
    print("This case was already existing")
  case .alreadyExisting:
    print("This case was already existing too...")
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果要为枚举添加新的大小写,则上面的函数将显示一个编译错误,表明切换大小写必须是详尽无遗的,并且我将被迫处理新的丢失大小写。我会在switch语句中添加第三种情况,或添加默认语句。

现在,为了处理这种无法预料的枚举案例,我想@unknown default在上面的现有函数中添加一个案例。唯一的问题是,现在这将给我警告Default will never be executed

所以问题是,我如何将来验证我的枚举,以便可以:

  1. 详尽地处理所有当前枚举的情况,并且
  2. 对未来的未知案例具有默认的处理机制,并且
  3. 仅当添加了新的案例并且这些案例必须由默认案例处理时,才显示警告。

也就是说,以下代码不应发出警告:

enum SomeEnumCases {
  case existing
  case alreadyExisting
}

func doSomething(withEnums enumCase: SomeEnumCases) {
  switch enumCase {
  case .existing:
    print("This case was already existing")
  case .alreadyExisting:
    print("This case was already existing …
Run Code Online (Sandbox Code Playgroud)

enums warnings swift swift-playground swift5

9
推荐指数
1
解决办法
1007
查看次数

Swift 中的内存布局

MemoryLayout 如何计算结构体的大小?

我读了这篇文章,我似乎理解得很好,直到我陷入了以下问题:

struct CertifiedPuppy1 {
  let age: Int
  let isTrained: Bool
  let isCertified: Bool
}

MemoryLayout<CertifiedPuppy1>.size        // 10
MemoryLayout<CertifiedPuppy1>.stride      // 16
MemoryLayout<CertifiedPuppy1>.alignment   // 8

struct CertifiedPuppy2 {
  let isTrained: Bool
  let age: Int
  let isCertified: Bool
}

MemoryLayout<CertifiedPuppy2>.size        // 17
MemoryLayout<CertifiedPuppy2>.stride      // 24
MemoryLayout<CertifiedPuppy2>.alignment   // 8


struct CertifiedPuppy3 {
  let isTrained: Bool
  let isCertified: Bool
  let age: Int
}

MemoryLayout<CertifiedPuppy3>.size        // 16 <--why not 10, like for CertifiedPuppy1 ??--
MemoryLayout<CertifiedPuppy3>.stride      // 16
MemoryLayout<CertifiedPuppy3>.alignment   // 8
Run Code Online (Sandbox Code Playgroud)

问题是,为什么CertifiedPuppy3 …

struct memory-layout swift swift4

5
推荐指数
1
解决办法
593
查看次数

使用Swift Codable从JSON数组中提取数据

我有这样的JSON响应:

在此处输入图片说明

我目前将可解码结构设计如下:

    struct PortfolioResponseModel: Decodable {
    var dataset: Dataset

    struct Dataset: Decodable {
        var data: Array<PortfolioData> //I cannot use [Any] here...

        struct PortfolioData: Decodable {
            //how to extract this data ?
        }
    }
   }
Run Code Online (Sandbox Code Playgroud)

问题是,如何提取数组中的数据,该数组的值可以为Double或String。

这是在操场上进行这项工作的示例字符串:

   let myJSONArray =
   """
   {
   "dataset": {
   "data": [
    [
   "2018-01-19",
   181.29
   ],
   [
   "2018-01-18",
   179.8
   ],
   [
   "2018-01-17",
   177.6
   ],
   [
   "2018-01-16",
   178.39
   ]
   ]
   }
   }
   """
Run Code Online (Sandbox Code Playgroud)

提取数据:

do {
    let details2: PortfolioResponseModel = try JSONDecoder().decode(PortfolioResponseModel.self, from: myJSONArray.data(using: .utf8)!)
    //print(details2) 
    //print(details2.dataset.data[0]) //somehow …
Run Code Online (Sandbox Code Playgroud)

json swift swift4 codable decodable

3
推荐指数
1
解决办法
4212
查看次数

在其下标getter中改变结构

在玩结构时,我发现了以下内容:

struct SomeStruct {
    private(set) var uncount: Int
    subscript(i: Int) -> Int {
        uncount = i  // <--'self' is immutable-----
        return 3
    }
}

let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
Run Code Online (Sandbox Code Playgroud)

上面的代码没有编译,因为'self是不可变的',你不能在下标中添加mutating关键字.

但是,以下工作完美:

struct SomeStruct {
    private(set) var uncount: Int
    subscript(i: Int) -> Int {
        get {
            return 3
        }
        set {
            uncount = i  //<--works well now---
        }
    }
}

let someStructInstance = SomeStruct(uncount: 3)
someStructInstance[345]
Run Code Online (Sandbox Code Playgroud)

问题:当下标函数都改变了struct属性时,为什么一个工作,而另一个工作?

syntax struct swift

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