小编koe*_*oen的帖子

iOS框架捆绑的路径

我正在研究iOS的框架,它带有一些数据文件.要将它们加载到Dictionary我做这样的事情:

public func loadPListFromBundle(filename: String, type: String) -> [String : AnyObject]? {
    guard
       let bundle = Bundle(for: "com.myframework")
       let path = bundle.main.path(forResource: filename, ofType: type),
       let plistDict = NSDictionary(contentsOfFile: path) as? [String : AnyObject]
    else { 
       print("plist not found")
       return nil 
    }

    return plistDict
}
Run Code Online (Sandbox Code Playgroud)

如果我在带有框架的游乐场中使用它,它可以按预期工作.

但是,如果我使用嵌入在应用程序中的框架,它不再起作用,"路径"现在指向应用程序的捆绑,而不是框架.

如何确保访问框架的捆绑包?

编辑:上面的代码驻留在框架中,而不是在应用程序中.

EDIT2:上面的代码是一个实用函数,不是结构或类的一部分.

frameworks bundle ios swift swift3

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

单个视图的 macOS SwiftUI 导航

我正在尝试为我的 macOS SwiftUI 状态栏应用程序创建一个设置视图。到目前为止,我的实现一直使用NavigationView, 和NavigationLink,但是当设置视图将父视图推到一边时,这个解决方案会产生一个半视图。下面的屏幕截图和代码示例。

导航边栏

在此处输入图片说明

struct ContentView: View {
    var body: some View {
        VStack{
            NavigationView{
            NavigationLink(destination: SecondView()){
                Text("Go to next view")
                }}
        }.frame(width: 800, height: 600, alignment: .center)}
}

struct SecondView: View {
    var body: some View {
        VStack{

                Text("This is the second view")

        }.frame(width: 800, height: 600, alignment: .center)
    }
}
Run Code Online (Sandbox Code Playgroud)

我能找到的少量信息表明,在 macOS 上使用 SwiftUI 是不可避免的,因为NavigationViewiOS ( StackNavigationViewStyle)上的“全屏”在 macOS 上不可用。

在 SwiftUI for macOS 中,是否有一种简单甚至复杂的方法来实现到设置视图的转换,该视图占据整个框架?如果没有,是否可以使用AppKit用来调用用 SwiftUI 编写的 View …

navigation macos swiftui macos-catalina swiftui-navigationview

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

Swift 4中的String,substring,Range,NSRange

我使用以下代码String从以下代码获取子字符串NSRange:

func substring(with nsrange: NSRange) -> String? {
    guard let range = Range.init(nsrange)
        else { return nil }
    let start = UTF16Index(range.lowerBound)
    let end = UTF16Index(range.upperBound)
    return String(utf16[start..<end])
}
Run Code Online (Sandbox Code Playgroud)

(来自:https://mjtsai.com/blog/2016/12/19/nsregularexpression-and-swift/)

当我编译与斯威夫特4(9B4的Xcode),我获取该声明两条线以下的错误startend:

'init' is unavailable
'init' was obsoleted in Swift 4.0
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为我没有使用init.

我怎样才能解决这个问题?

string range nsrange swift4

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

WKWebView在后台,几个奇怪的断言

我想在 iOS 中找出当前浏览器的 userAgent。

所以在 Xcode 创建的默认项目中,我添加了:

#import "ViewController.h"
#import <WebKit/WKWebView.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    dispatch_async(dispatch_get_main_queue(), ^{
        WKWebView *obj = [[WKWebView alloc] initWithFrame:CGRectZero];
        [obj evaluateJavaScript: @"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
            NSLog(@"evaluateJavaScript = %@ : %@", result, error);
            NSLog(@"To make sure that webview alive: %@", obj);
        }];
    });
}


@end
Run Code Online (Sandbox Code Playgroud)

它打印出我期望的内容:

评估JavaScript = Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS …

objective-c ios

13
推荐指数
0
解决办法
6535
查看次数

在 UIkit 中嵌入 swiftUI 时无法隐藏导航栏

我试图navigationBar在将一些swiftUI放入 a时隐藏UIKit viewController

override func viewWillAppear(_ animated: Bool) {
   super.viewWillAppear(animated)
   self.navigationController?.setNavigationBarHidden(true, animated: animated)
Run Code Online (Sandbox Code Playgroud)

但它不会消失。当我拿走swiftUI 时,它仍然有效。有谁知道如何解决这个问题?

编辑:

我正在实例化一个这样的视图 let controller = UIHostingController(rootView:view()) ,其中视图是 swiftUI,然后像添加任何 UIKit 元素一样将其添加到 UIView() 中。

uinavigationbar uiviewcontroller uikit swift swiftui

12
推荐指数
7
解决办法
2791
查看次数

快速拆分数组的优雅方式

给定任何类型的数组和想要的子数组数量,我需要这个输出:

print([0, 1, 2, 3, 4, 5, 6].splitInSubArrays(into: 3))
// [[0, 3, 6], [1, 4], [2, 5]]
Run Code Online (Sandbox Code Playgroud)

即使没有“足够”的元素来填充这些,输出也必须包含正确数量的子数组:

print([0, 1, 2].splitInSubArrays(into: 4))
// [[0], [1], [2], []]
Run Code Online (Sandbox Code Playgroud)

我现在有这个工作实现,但有没有更好(更优雅)的方式来实现这个输出:

extension Array {

    func splitInSubArrays(into size: Int) -> [[Element]] {

        var output: [[Element]] = []

        (0..<size).forEach {

            var subArray: [Element] = []

            for elem in stride(from: $0, to: count, by: size) {
                subArray.append(self[elem])
            }

            output.append(subArray)
        }

        return output
    }
}
Run Code Online (Sandbox Code Playgroud)

arrays swift

12
推荐指数
5
解决办法
851
查看次数

使用AFNetworking 2.0进行分组或批量请求

我正在尝试找出使用AFNetworking 2.0对大量GET请求进行分组或批处理的最佳做法.所有GET请求都需要在代码可以继续之前完成,但它们不必一个接一个地运行.现在对于单个请求,我正在使用AFHTTPRequestOperationManager(另见此处:子类AFHTTPRequestOperationManager?).

这里描述了一种可能性,使用dispatch_group:如何使用AFNetworking 2批量请求?,但那是为了AFHTTPSessionManager,这只是iOS7.我的应用程序仍然针对iOS6,所以我需要使用AFHTTPRequestOperationManager.

是否正在使用dispatch_group?或者AFNetworking内置了一些我忽略并可以用于此的内容?

编辑:仍然不知道正确的方法是什么...例如,我如何使用组AFHTTPRequestOperation

我尝试了以下内容,但在所有响应进入之前,最终会首先显示最终的NSLog("完成搜索"):

dispatch_queue_t dispatch_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t dispatch_group = dispatch_group_create();

for (Entry *e in self.entries)
{
    dispatch_group_async(dispatch_group, dispatch_queue, ^{
        NSString *queryString = [e getQueryString];         
        NSURL *URL = [NSURL URLWithString: queryString];
        NSURLRequest *request = [NSURLRequest requestWithURL:URL];

        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        operation.responseSerializer = [AFHTTPResponseSerializer serializer];
        operation.completionGroup = dispatch_group;
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"%@", responseObject);
        } failure:nil];

        [operation start];
    });
} …
Run Code Online (Sandbox Code Playgroud)

ios afnetworking afnetworking-2

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

SFSafariViewController safariViewControllerDidFinish

我对SFSafariViewController委托方法的使用感到困惑safariViewControllerDidFinish:.文档和教程说当用户选择"完成"时,我需要使用它来关闭我的视图.但它可以正常工作(关闭视图),而无需实现委托方法.

我错过了什么,我还需要实施吗?

ios9

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

在 SwiftUI 中使用选项卡栏弹出到根视图

在 SwiftUI 中,有没有办法像大多数 iOS 应用程序一样通过点击选项卡栏来弹出到根视图?

这是预期行为的示例。

在此输入图像描述

我尝试使用simultaneousGesture以下方式以编程方式弹出视图:

import SwiftUI


struct TabbedView: View {
    @State var selection = 0
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
                TabView(selection: $selection) {
            RootView()
                .tabItem {
                    Image(systemName: "house")
                    .simultaneousGesture(TapGesture().onEnded{
                        self.presentationMode.wrappedValue.dismiss()
                        print("View popped")
                    })
            }.tag(0)
                
            Text("")
                .tabItem {
                    Image(systemName: "line.horizontal.3")
            }.tag(1)
        }
    }
}

struct RootView: View {
    var body: some View{
        NavigationView{
            NavigationLink(destination:SecondView()){
        Text("Go to second view")
            }
        }
    }
}

struct SecondView: View {
    var body: some View{
        Text("Tapping the …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

10
推荐指数
3
解决办法
889
查看次数

在 iOS 14 中获取 strokeWidth NSAttributedString 问题

我在 iOS 14 上遇到笔触颜色问题。

let attributes: [NSAttributedString.Key: Any] = [
    .foregroundColor: UIColor.white,
    .strokeColor: UIColor.black,
    .font: UIFont.systemFont(ofSize: 65, weight: .black),
    .strokeWidth: -1 
]
lableNumber.attributedText =  NSAttributedString(string: "2", attributes: attributes)
Run Code Online (Sandbox Code Playgroud)

iOS 13

在此处输入图片说明

iOS 14

例子

它适用于 iOS 13,但不适用于 iOS 14。谁能帮我解决这个问题?

nsmutablestring ios swift ios13 ios14

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