小编Hon*_*ney的帖子

Swift 中计算属性和将函数设置为变量之间的区别

我有这两种方法来设置我在SO中看到的字符串。

我想知道其中一种相对于另一种的优势是什么,以及是否有人可以给我该语法的文章或文档的链接。

我相信第一个称为计算属性,并且我已阅读 swift.org 上的计算属性部分。

我认为第二个实际上只是将常量名称“string2”设置为闭包,但我可能没有将其称为正确的事情,这就是我问的原因,因为我真的找不到任何关于它的文章或文档。谢谢提前寻求任何帮助。

var string1: String { return "My first string"}

let string2 = { return "My second string"}()
Run Code Online (Sandbox Code Playgroud)

instantiation swift computed-properties

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

获得“让”模式的警告无效;子模式没有绑定任何变量

我正在执行以下操作,但收到以下警告:

'let' 模式无效;子模式没有绑定任何变量

enum Seat {
    case middle
    case window
    case aisle(Int)
}

let m : Seat = .middle
let w : Seat = .window
let a : Seat = .aisle(5)

let seats = [m,w,a]

for seat in seats {
    if case let .middle = seat {
        print("middle")
    }
    if case let .window = seat {
        print("window")
    }
    if case let Seat.aisle(row) = seat {
        print("able to let row be the associatedvalue of seat; its value is: \(row)")
    }
}
Run Code Online (Sandbox Code Playgroud)

enums pattern-matching swift

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

是否需要在单例类中使用弱引用?

我遇到了raywenderlich的一个教程,作者为处理单例中的线程问题提供了一些很好的技巧。但是,当使用单例类中的闭包时,他使用的是“弱”引用循环。确实需要这样做吗,因为类是单例的,所以应该总是有一个实例?

    final class PhotoManager {
      private init() {}
      static let shared = PhotoManager()

      private var unsafePhotos: [Photo] = []

    let concurrentPhotoQueue = DispatchQueue(label: "com.jeesson.googlypuff.photoQueue", attributes: .concurrent)
      var photos: [Photo] {
        var photoCopy:[Photo]!    
        concurrentPhotoQueue.sync {
            photoCopy = self.unsafePhotos
        }
        return photoCopy
      }

      func addPhoto(_ photo: Photo) {

// Do we need 'weak self here.. and why?
        concurrentPhotoQueue.async(flags: .barrier) {[weak self] in
            // 1
            guard let self = self else {
                return
            }
            self.unsafePhotos.append(photo)
            DispatchQueue.main.async { [weak self] in
                //self?.postContentAddedNotification()
            }
        } …
Run Code Online (Sandbox Code Playgroud)

singleton memory-management weak-references grand-central-dispatch swift

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

纱线:在 gatsby 部署到 netlify 后找不到命令

我不断收到此错误。

Executing user command: yarn build
/usr/local/bin/build: line 112: yarn: command not found
Run Code Online (Sandbox Code Playgroud)

我从读Netlify -管理构建依赖关系yarn必须包含在我的package.json。然而我看到yarn在我的package.json

我已经清理了缓存并再次部署。我尝试添加 yarn 和 npm 版本作为构建环境,但它仍然不起作用。我还研究了如何为下一个项目更改默认包管理器?但没有找到具有以下结构的json:

{
  "cli": {
    "packageManager": "yarn"
  }
}
Run Code Online (Sandbox Code Playgroud)

FWIW 这在本地构建良好。只有在我推送到我的远程存储库并且 Netlify 正在构建后才会出错。更奇怪的是,如果我使用默认启动器,则不会发生此错误。

gatsby netlify yarnpkg

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

您的应用程序包签名中的权利与您的配置文件中包含的权利不匹配

我遇到了一个奇怪的问题,我没有更改 expo app.json 中的任何 expo 设置,突然 Apple 拒绝存档,原因如下:

错误 ITMS-90164:“无效的代码签名权利。应用程序包签名中的权利与配置文件中包含的权利不匹配。根据配置文件,包包含不允许的键值:'[ ]' 用于“Payload/ExpoKitApp.app/com.company.appname”中的密钥“com.apple.security.application-groups”。

我的世博会配置如下所示:

{
  "expo": {
    "name": "App Name",
    "slug": "app-name-slug",
    "version": "1.1.1",
    "orientation": "portrait",
    "icon": "./src/assets/icon.png",
    "splash": {
      "image": "./src/assets/splash.png",
      "resizeMode": "cover",
      "backgroundColor": "#000000"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": false,
      "bundleIdentifier": "com.company.appname",
      "buildNumber": "1.1.1",
      "infoPlist": {
        "NSCameraUsageDescription": "App Name uses your camera to allow you to upload a profile picture.",
        "NSPhotoLibraryUsageDescription": "App Name uses your photos to allow you to upload …
Run Code Online (Sandbox Code Playgroud)

entitlements ios provisioning-profile expo app-store-connect

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

尽管没有强引用,但内存泄漏?

我正在进行性能测试,尝试测量NSOutlineViewMac 应用程序中重要部分的渲染性能。在此过程中,我循环多次,创建视图,将其嵌入虚拟窗口中,并将其渲染为图像。我概括了一点,但大致是这样的:

// Intentionally de-indented these for easier reading in this narrow page
class MyPerformanceTest: XCTestCase { reading
func test() { 
measure() {
// autoreleasepool {

    let window: NSWindow = {
        let w = NSWindow(
            contentRect: NSRect.init(x: 100, y: 100, width: 800, height: 1200),
            styleMask: [.titled, .resizable, .closable, .miniaturizable],
            backing: .buffered,
            defer: false
        )
        w.tabbingMode = .disallowed
        w.cascadeTopLeft(from: NSPoint(x: 200, y: 200))
        w.makeKeyAndOrderFront(nil)
        w.contentView = testContentView // The thing I'm performance testing
        return w
    }()

    let bitmap = …
Run Code Online (Sandbox Code Playgroud)

instruments nsoutlineview appkit automatic-ref-counting swift

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

使用分段控件禁用用户交互?

我想启用和禁用UISegmented Control的用户交互.我注意到它的超类UIControl有一个名为"enabled"的属性这是我需要设置以禁用/启用我的控件吗?

uisegmentedcontrol ios

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

为什么NSURL在方案之后使用双正斜杠解析字符串与具有单个正斜杠的字符串不同?

将字符串解析为NSURL对象时,NSURL使用单个正斜杠将字符串处理为与方案后面带有双正斜杠的字符串不同.

为什么会这样?

以下是一些例子:

NSURL *url = [NSURL URLWithString:@"app-id://path1/path2"];

NSLog(@"%@",url.scheme);    // "app-id"
NSLog(@"%@",url.path);      // "/path2"
NSLog(@"%@",url.host);      // "path1"


NSURL *url = [NSURL URLWithString:@"app-id:/path1/path2"];

NSLog(@"%@",url.scheme);    // "app-id"
NSLog(@"%@",url.path);      // "/path1/path2"
NSLog(@"%@",url.host);      // nil
Run Code Online (Sandbox Code Playgroud)

cocoa nsurl core-foundation ios nsurlcomponents

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

通过simctl启动时如何设置iOS模拟器语言

我正在模拟器中使用xcrun simctl. 我希望能够设置模拟器启动时使用的语言(即在一次运行时切换到法语,在另一次运行时切换到 Englash)。有没有办法做到这一点?过去可以使用-AppleLanguages模拟器的选项,但似乎不再起作用(自 Xcode 5.x 起)。

xcode localization ios-simulator simctl

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

ios如何添加inputAccessoryView?

我正在尝试复制Facebook Messenger App,其中有一个UITextView连接到键盘的顶部.

由于这个应用程序的性质,我需要view连接,而不是ScrollView在键盘出现时手动上下滚动.

这可以通过使用a来实现inputAccessoryView.

我在这里阅读了文档.

文档非常简短,并说:

"此属性通常用于将附件视图附加到为UITextField和UITextView对象呈现的系统提供的键盘.

此只读属性的值为nil.如果要将自定义控件附加到系统提供的输入视图(例如系统键盘)或自定义输入视图(您在inputView属性中提供的视图),请在UIResponder子类中将此属性重新声明为read-write.

然后,您可以使用此属性来管理自定义附件视图.当接收器成为第一响应者时,响应者基础设施将附件视图附加到适当的输入视图,然后再显示它.

我试过宣布一个属性

@interface CommentViewController ()
@property (nonatomic, readwrite, retain) UIView *inputAccessoryView;
@end
Run Code Online (Sandbox Code Playgroud)

然后设置它:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)];
    [view setBackgroundColor:[UIColor greenColor]];

    self.inputAccessoryView = view;

}
Run Code Online (Sandbox Code Playgroud)

然后我试着调用这两个:

  1. [self.tableView becomeFirstResponder];

  2. [view becomeFirstResponder];

什么都没发生.我究竟做错了什么?

*注意 - 额外信息:我使用的UITableViewController是我希望UIView附加的inputAccessoryView.一旦我得到了视图工作,那么我将添加一个UITextView和更多,但这主要是一个例子.

任何帮助是极大的赞赏!

objective-c uitableview ios inputaccessoryview

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