我正在研究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:上面的代码是一个实用函数,不是结构或类的一部分.
我正在尝试为我的 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 是不可避免的,因为NavigationView
iOS ( StackNavigationViewStyle
)上的“全屏”在 macOS 上不可用。
在 SwiftUI for macOS 中,是否有一种简单甚至复杂的方法来实现到设置视图的转换,该视图占据整个框架?如果没有,是否可以使用AppKit
用来调用用 SwiftUI 编写的 View …
navigation macos swiftui macos-catalina swiftui-navigationview
我使用以下代码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),我获取该声明两条线以下的错误start
和end
:
'init' is unavailable
'init' was obsoleted in Swift 4.0
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我没有使用init.
我怎样才能解决这个问题?
我想在 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 …
我试图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() 中。
给定任何类型的数组和想要的子数组数量,我需要这个输出:
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) 我正在尝试找出使用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) 我对SFSafariViewController
委托方法的使用感到困惑safariViewControllerDidFinish:
.文档和教程说当用户选择"完成"时,我需要使用它来关闭我的视图.但它可以正常工作(关闭视图),而无需实现委托方法.
我错过了什么,我还需要实施吗?
在 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) 我在 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。谁能帮我解决这个问题?
swift ×5
ios ×4
swiftui ×3
afnetworking ×1
arrays ×1
bundle ×1
frameworks ×1
ios13 ×1
ios14 ×1
ios9 ×1
macos ×1
navigation ×1
nsrange ×1
objective-c ×1
range ×1
string ×1
swift3 ×1
swift4 ×1
uikit ×1